Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Конструктор __construct(MySecond $s)


Автор: vins32 21.10.2014, 22:55
Здравствуйте, собственно начал изучать ООП + Zend 2
Интересует код
Код

$di = new Zend\Di\Di;    
class MyFirst{
    public $second;

    public function __construct(MySecond $s)
    {
        $this->second = $s;
    }
}

class MySecond{
    public function get()
    {
        echo "Hello!!!";
    }

    public function __construct()
    {

    }
}

$f = $di->get('MyFirst');
$f->second->get();


Код в прицепе понятен не пойму только 1 кусок
Код

public function __construct(MySecond $s)
{
    $this->second = $s;
}        


Не пойму что за первый параметр MySecond в конструкторе класса MyFirst и как он связан с классом MySecond ниже по коду.
Прошу помощи, расскажите или линк на инфу.

Автор: bars80080 22.10.2014, 17:53
Цитата(vins32 @  21.10.2014,  22:55 Найти цитируемый пост)
что за первый параметр MySecond в конструкторе класса MyFirst и как он связан с классом MySecond ниже по коду

это жёсткая проверка типа входящей переменной. если она не является объектом класса MySecond (либо его потомка), то получишь эксепшн

Автор: vins32 22.10.2014, 18:39
Прошу немного по конкретные, что-то не уловил smile 

Автор: PavelSvoboda 22.10.2014, 18:46
Клас ето тип даних. $s типа MySecond. так же как тип int , float, double ... , только ето свой созданий тип

Автор: vins32 22.10.2014, 19:45
Вроде уловил, получается жёсткая привязка к классу, если не указан другой класс (не MySecond) в котором нет метода get() то Exception
теперь понял почему 
Код

$f->second->get();

Класс MySecond присвоился  свойству second в классе MyFirst
Спасибо!

Автор: bars80080 23.10.2014, 16:41
да, смысл здесь такой: если сторонний разработчик захочет воспользоваться существующей наработкой и передать в MyFirst какой-то объект, то он обязан будет сделать этот объект типом MySecond. соответственно, мы гарантировано знаем, что всё (свойства, методы) что свойственно объекту MySecond будет реализовано в переданном объекте и можно смело пользоваться этими свойствами и методами.
так сказать - дисциплина разработки

Автор: Aliance 27.10.2014, 08:51
vins32, http://php.net/manual/ru/language.oop5.typehinting.php

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)