Twitt
@Twitt

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

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

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


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

Первый вариант это вроде как Dependency Inversion, подкидываем зависимость, а второй вариант - это что? Законно внутри конструктора делать так?
  • Вопрос задан
  • 72 просмотра
Пригласить эксперта
Ответы на вопрос 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.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
Бюро Цифровых Технологий Санкт-Петербург
от 120 000 до 180 000 ₽
02 мая 2024, в 23:56
2000 руб./за проект
02 мая 2024, в 23:29
1500 руб./в час
02 мая 2024, в 23:16
7500 руб./за проект