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,那么实例也是懒惰创建的吗?
如果是,工厂和物体之间有什么区别?
答案 0 :(得分:3)
PHP-DI作者在这里,似乎存在一些混淆(给出问题以及其他答案有多么错误)。我已经改进了文档,希望能够解决问题:ec8120ee。
回答你的问题:
如果你使用Objects,那么实例也是懒惰创建的吗?
是,所有定义都会延迟解决,object()
。
如果是,工厂与物体之间的区别是什么?
只是语法。在某些情况下,编写闭包更实用,在其他一些情况下,您可能希望使用object()
来避免使用样板。
老实说,这只是一种语法偏好。