PHP-DI - 工厂和对象之间的区别

PHP-DI - Differences between Factories and Objects

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.

回答您的问题:

If you use Objects, is the instance also created lazily?

,所有的定义都是延迟解析的,object()也是。

If yes, what's the difference between factories and objects?

只是语法。在某些情况下,编写闭包更实用,在其他一些情况下,您可能希望通过使用 object().

来避免样板文件

老实说,这只是语法偏好。