|
16
|
| Rupert Madden-Abbott · 技术社区 · 16 年前 |
|
|
1
13
让我们一个接一个地解决这个问题。
Registry 类转换为数据库类。你也可以 have dedicated methods on the Registry to create the required classes
注册表本身可能没有递归,但是注册表中的对象很可能有循环引用。当使用5.3之前的PHP版本从注册表中清除对象时,这可能会导致内存泄漏 Garbage Collector 是的。但这就是注册的目的。它与向对象传递$全局变量没有太大区别。如果您不想这样做,就不要使用注册表,而只传递类实例处于有效状态所需的参数。或者干脆不储存。
不一定。使用构造函数注入时,可以将参数的数量限制为使对象进入有效状态所必需的参数。其余的可选依赖项也可以通过setter注入来设置。而且,没有人阻止您在数组或配置对象中添加参数。或使用 Builders .
当您使用全局注册表时,您将此依赖项与类紧密耦合。这意味着如果没有这个具体的注册表类,using类就不能再使用了。您假设只有这个注册表,而不是一个不同的实现。在注入依赖项时,您可以自由地注入任何满足依赖项职责的内容。
They just make it harder. dependencies on the global state ,则必须在每次测试运行时创建此状态。 |
|
|
2
5
我会把这个作为一个答案,因为我想包括代码。
我比较了传递对象和使用
结果是:
如果我去掉嵌套对象和自引用,结果是一样的。。。 所以是的,这两种不同的数据传递方法之间似乎没有真正的性能差异。因此,做出更好的架构选择(IMHO,这就是依赖注入)。。。 剧本:
按5.3.2测试 |