PHP-DI позволяет некоторым методам определять инъекции, включая фабрики и объекты: http://php-di.org/doc/php-definitions.html.
Фабрики:
TestClass::class => function () {
return new TestClass('param');
}
TestClass
экземпляр создается лениво, только когда это нужно.
Объекты:
TestClass::class => DI\object()->constructor('param')
Если вы используете Objects, экземпляр также создается лениво?
Если да, в чем разница между фабриками и объектами?
Автор PHP-DI здесь, кажется, есть некоторая путаница (учитывая вопрос и насколько неправильным является другой ответ). Я улучшил документацию, надеюсь, это прояснит ситуацию: ec8120ee.
Чтобы ответить на ваши вопросы:
Если вы используете Objects, экземпляр также создается лениво?
да, все определения решаются лениво, object()
тоже.
Если да, в чем разница между фабриками и объектами?
Просто синтаксис. В некоторых случаях более практично написать закрытие, в некоторых других случаях вы можете избежать использования шаблона, используя object()
,
Честно говоря, это просто предпочтение синтаксиса.
Других решений пока нет …