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

Может ли вот так работать DI контейнер?

$sys = new Container();
Далее класс считывает конфиг, где прописано как создавать объект, его аргументы конструктора и т.д.
При первом обращении к сервису вида
$sys->get(Request::class);
//или по псевдониму как $sys->request

Контейнер создаст объект следуя правилам в конфиге.

Динамически можно регистрировать сервисы через замыкания
$sys->notInitService = function(Container $c) {
return new NewService($c->get(ServiceArg::class));
}


Может ли оно вообще так работать. В сети тонна информации и статей, которые нивелируются по смыслу и найти внятное объяснение DI весьма трудно
  • Вопрос задан
  • 192 просмотра
Подписаться 1 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
  • Stepik
    PHP (pro)
    1 месяц
    Далее
  • Skillbox
    Профессия PHP-разработчик с нуля до PRO
    7 месяцев
    Далее
Решения вопроса 1
NeLexa
@NeLexa
Здравствуйте.
Конечно, может.
Посмотрите на хорошую реализацию DI - php-di.org/.
Ваш пример бы там выглядел бы так:

$container->set(ServiceArg::class, function(){
    return new ServiceArgImpl();
});
$container->set('notInitService', \DI\object(NewService::class));
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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