Php, составной шаблон, плохо, когда ребенок знает о родителе?

с учетом этого кода:

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) { } } 

его лучше, но почему?

Здесь вообще нет отношений между родителем и ребенком. Вы просто создаете экземпляр одного класса и передаете ему экземпляр другого класса. В этом нет никаких проблем, и это не означает, что эти классы находятся в каких-либо отношениях.

Что плохо в этом примере, так это то, что вы hardcode Child внутри Parent . Это делает Child жесткой зависимостью, которая не может быть заменена или контролироваться извне, и, следовательно, может вызвать проблемы в будущем при тестировании или рефакторинге кода. Вместо этого вы должны искать инъекцию зависимостей.