PHP-DI允许一些方法来定义注入,包括工厂和对象:http://php-di.org/doc/php-definitions.html。
工厂:
TestClass::class => function () {
return new TestClass('param');
}
仅在需要时延迟创建TestClass
实例。
对象:
TestClass::class => DIobject()->constructor('param')
如果使用对象,实例是否也是懒惰创建的?
如果是,工厂和对象之间有什么区别?
PHP-DI作者在这里,似乎有一些混乱(考虑到这个问题以及另一个答案的错误程度(。我已经改进了文档,希望这将解决问题:ec8120ee。
要回答您的问题:
如果使用对象,实例是否也是懒惰创建的?
是的,所有定义都是懒惰地解决的,object()
也是如此。
如果是,工厂和对象之间有什么区别?
只是语法。在某些情况下,编写闭包更实用,在其他一些情况下,您可能希望通过使用object()
来避免样板。
老实说,这只是一种语法偏好。