给出这段代码:
class Parent
{
public function getAdata()
{
return array(1,2,3,4);
}
public function getChild()
{
return new Child ($this);
}
}
class Child
{
public function __constructor (Parent $p)
{
$p->getAdata();
}
}
他们说这很糟糕,因为Child
知道Parent
。如果我像这样重写它:
class Parent
{
public function getAdata()
{
return array(1,2,3,4);
}
public function getChild()
{
return new Child ($this->getAdata());
}
}
class Child
{
public function __constructor ($data)
{
}
}
它更好,但为什么?
答案 0 :(得分:4)
这里根本没有亲子关系。您只需实例化一个类并将其传递给另一个类的实例。完全没有问题,并不意味着这些类有任何关系。
对该示例的不好之处在于您在Child
内部对Parent
进行了硬编码。这使Child
成为硬编码的依赖,无法替换或外部控制,因此将来可能会因测试或重构代码而导致问题。你应该考虑依赖注入。