Как это зачем? Библиотека же может использовать другие библиотеки, иначе зачем тогда вообще di?
Допустим есть шаблонизатор, который компилирует шаблоны в чистый php и сохраняет скомпилированные файлы с помощью какого то другого класса, допустим класса кэш.
тоесть
$tpl = new tpl(new cache());
Или просто модели, которые используют тот же кэш или работу с базой данных.
$model = new model(new pdo());
Как в таком случае сработает тот же пимпл
$conteiner = new conteiner();
$conteiner['model']->getAll();
Тут запускается контейнер, который возвращает модель, которая использует шаблонизатор, который использует кэш.
Так вот как тут быть модели, если в ней нельзя использовать контейнер, как она запустит шаблонизатор?
К тому же описывать каждый аргумент геморойно, потом рефакторинг замучает.
function __construct (PDO $pdo, Smatry $smarty, Cache $cache) {}
ИМХО лучше передать объект, как я писал в начале темы. Или нет?
function __construct ($di) {}
Например, если ты скачаешь с гитхаба какую-нибудь библиотеку, то не будешь ведь ее переписывать так, чтобы она поддерживала твой "di".
А почему бы и нет?
Когда ты качаешь с гитхаба тот же смарти, приходится залезать в код и менять свойство отвечающее за дефолтную директорию (неуверен именно на счёт смарти, но суть такая).
Вот тоже самое с DIC, залезаешь в конструктор и меняешь дефолтный DIC
Скачал такую
function __construct ($di) {
$di = $di ? $di : new di();
}
Переписал на такую
function __construct ($di) {
$di = $di ? $di : new pimple();
}
ну ли без new в конструкторе, всегда в библиотеки передавать diс
$di = new di();
$model = new model($di);
_____________
Промокод предоставляет скидку на заказ домена и/или хостинга reg.ru
BFCC-3895-8804-9ED2