Просмотр поста

.
AlkatraZ
╭∩╮ (`-`) ╭∩╮
# Microb (03.02.2020 / 21:12)
Вопрос к разработчикам johncms.
container - для чего он нужен? Я просто не понимаю если можно просто использовать во так подключаемые библиотеки.
$env = Environment::class;
$db = PDO::class;
Зачем
Ну начнем с того, что $env = Environment::class; работать не будет.
В пременной $env просто будет имя класса, но не объект.
Класс надо инициализировать с помощью директивы new:
$env = new Johncms\System\Http\Environment();

Однако и тут ничего работать не будет. Классу Environment для работы нужен правильно инициализированный объект Request.
$request = new Request::fromGlobals();
$env = new Johncms\System\Http\Environment($request);

Как видишь, уже просто не получается. А ведь бывают классы, требующие по нескольку зависимостей и сам являющийся чьей-то зависимостью. Возникает путаница и неразбериха.

Вот для этого и нужен DI контейнер.
Теперь разработчику не нужно думать, как правильно инициализировать класс Environment, ему достаточно знать, что в контейнере есть такой класс и объект будет создан со всеми необходимыми зависимостями любой сложности.
Теперь достаточно написать так:
$env = di(Environment::class);