Задать вопрос
Hatsune-Miku
@Hatsune-Miku
Няшк :3

Dependency Injector это магия?

С неделю пытаюсь понять, как же работает dependency injector "изнутри".
Копал php-di и вроде бы понял... php-di автоматически внедряет через конструктор нужный класс и поэтому заменить класс MyService если потом понадобится становится гораздо проще...

Типо так:

<?php
class MyService
{
    public function returnValue ()
    {
        return 'Hello World';
    }
}

class MyController
{
    private $myService;

    public function __construct (MyService $myService)
    {
        $this->myService = $myService;
    }

    public function action ()
    {
        echo $this->myService->getValue();
    }
}

$di = new DI\ContainerBuilder::buildDevContainer();

$myController = $di->get('MyController');
$myController->action(); // Выводит Hello World


Для меня код выше не более чем магия, как оно узнало, что нужно передать именно MyService?
И ещё не понятно, а что делать если нужно например 10 сервисов в классе, все их регистрировать руками в конструкторе?
  • Вопрос задан
  • 584 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 1
toxicmt
@toxicmt
кофаундер Хекслета
Внедрение зависимостей может происходить не только через конструктор, но и, например, через сеттеры. А многие библиотеки для внедрения зависимостей используют рефлексию для того чтобы узнать "а что собственно требуется". Рефлексия это способность программ узнавать структуру самой себя во время выполнения. В php это php.net/manual/ru/intro.reflection.php.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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