Почему анонимные функции используются в контейнерах ioc, таких как Pimple

Я знаю, в контейнере Pimple, зависимости объявлены как

$container = new Pimple();
$container['db'] = function (){
return new SomeClass;
};

Мой вопрос заключается в том, что если я просто объявил зависимости как простые массивы, подобные этому.

$container = new Pimple();
$container['db'] = new SomeClass;

В чем разница?

3

Решение

Разница в том, что называется ленивая загрузка, конкретно ленивая инициализация.

В вашем первом примере SomeClass фактически не создается, пока не будет запрошено. В вашем втором примере это создается сразу. Таким образом, даже если запрос никогда не попадает в базу данных, объект создается и соединение устанавливается.

Используя ваш первый пример, соединение с базой данных никогда не устанавливается, если запрос фактически не использует базу данных.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]