PHP - “神奇变量值” - 酷还是傻瓜?

时间:2012-07-07 23:46:36

标签: php dependency-injection

我对使用依赖注入设计代码框架有一些疑问:

FLOW3Doctrine使用Annotations将类实例注入对象属性。这是通过代码反射完成的......性能是baaaaad:D

您如何看待这种方法?

class Test extends Injector {
    protected $abc = '@Inject:/namespace/classname';
}

Injector只是遍历类属性并查找字符串是否以@Inject开头并创建给定类的对象。

它很酷还是很糟?

2 个答案:

答案 0 :(得分:1)

如果您没有使用带有Doctrine注释的缓存(这比您的解决方案更优雅,那么调试将非常困难[除了您需要一个字符串之外,这实际上是唯一的问题) '@Inject'在其中]如果出现问题),那么你做错了。在生产环境中,如果正确设置缓存(see the docs),则不会有任何问题:)

答案 1 :(得分:1)

嗯..使用反射工作很慢。这是无可争辩的。但是有一个可行的解决方法:使用APC缓存每个类实例的依赖项。

那就是说,你必须明白,你所说的不是依赖注入(它是设计模式),而是依赖注入容器(DIC)。

DIC通常是框架(或部分框架),它们试图自动化在代码中使用依赖关系的过程。这个通常和服务定位器(一个漂亮的“全球注册表”)anitpattern,具有不同程度的危害。

所以...我的建议是:

  • 如果你没有选择使用DIC的代码库 - 使用缓存。广泛。
  • 如果您不限于特定的第三方库/框架 - 使用手动依赖注入