Задать вопрос
Twitt
@Twitt

В чем отличие между двумя записями?

Возник вопрос, видел несколько записей, вот примеры:
1) $zoo = new Zoo(new Monkey());
2)
class Zoo {
    protected $monkey;

    public function __construct()
{
   $this->monkey = new Monkey();
}
}


Примеры взяты с головы, но все же, в чем разница?

Первый вариант это вроде как Dependency Inversion, подкидываем зависимость, а второй вариант - это что? Законно внутри конструктора делать так?
  • Вопрос задан
  • 75 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
@Mysterion
Законно. Просто иногда может быть так:
class Zoo {
    protected $monkey;

    public function __construct(Monkey $monkey)
    {
        $this->monkey = $monkey;
    }
    
    public function foo() {
        return $this->monkey->foo;
    }
}

class Monkey {
    public $foo;
}
$monkey = new Monkey();
$monkey->foo = "bar";
$zoo = new Zoo($monkey);
echo $zoo->foo();

А внутри Zoo, соответственно, пляски исходя из свойств Monkey.
Ответ написан
Комментировать
php666
@php666
PHP-макака
Законно внутри конструктора делать так?
это допустимо, если подразумевается, что в классе Zoo НИКОГДА не придется подменять объект класса Monkey и функционирование Zoo невозможно без Monkey.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы