с учетом этого кода:
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
жесткой зависимостью, которая не может быть заменена или контролироваться извне, и, следовательно, может вызвать проблемы в будущем при тестировании или рефакторинге кода. Вместо этого вы должны искать инъекцию зависимостей.