从原始对象中加载另一个对象是一个好习惯,如下所示:
Class parent() {
$child;
function loadChild() {
$child = new Child();
$this->child = $child;
}
}
或者,是否应始终单独传递子对象?
Class parent() {
$child;
function setChild(child $child) {
$this->child = $child;
}
}
$parent = new Parent();
$child = new Child();
$parent->setChild($child);
哪个更好,更灵活等?
答案 0 :(得分:4)
第二种选择更合适。它被称为Dependency Injection。其中一个主要原因是您可以传递任何实现child
接口的对象(包括模拟对象,这对TDD很重要),而无需修改您的类。
答案 1 :(得分:4)
这取决于具体情况。
第二个对象的名称表明
Child
实例仅由Parent
实例Parent
实例如果是这种情况,那么第一种模式(Object composition pattern)就更好了。
如果代码中的其他位置需要/使用Child
实例,则第二种模式(Dependency injection)更合适。依赖注入是一种更灵活的模式,如果您不确定您的用例,通常应该使用依赖注入。
答案 2 :(得分:1)
依靠你想要的东西。如果您确定不需要更换子项,则可以在对象中创建它。少代码=>减少错误。但是如果你以后想要有不同的Childs,那就太糟糕了。