Доступ к дочернему объекту из родительской области

Мне нужен родительский класс для доступа к его дочерним свойствам:

class Parent { private $_fields = null; public function do_something() { // Access $_fields and $child_var here } } class Child extends Parent { private $child_var = 'hello'; } $child = new Child(); $child->do_something(); 

Когда $_fields изменяется из дочерней области, в родительской области все еще $_fields . При попытке получить доступ к $ child_var из родительской области с помощью $this->child_var , это, конечно, не определено.

Я не нашел ничего похожего на «набор функций», который будет просто скопирован в дочернем классе …

Взгляните на статью о видимости .

В принципе, вы не можете получить доступ к родительским свойствам / методам, а родительский доступ к нему невозможен. Однако вы можете вместо этого объявить свое свойство / метод.

 class Parent { protected $_fields = null; public function do_something() { // Access $_fields and $child_var here } } class Child extends Parent { protected $child_var = 'hello'; } $child = new Child(); $child->do_something(); 

Пытаться получить доступ к дочерним значениям из базового (родительского) класса – плохой дизайн. Что делать, если в будущем кто-то создаст другой класс на основе вашего родительского класса, забудьте создать это конкретное свойство, к которому вы пытаетесь получить доступ в своем родительском классе?

Если вам нужно сделать что-то подобное, вы должны создать свойство в родительском классе, а затем установить его в child:

 class Parent { protected $child_var; private $_fields = null; public function do_something() { // Access $_fields and $child_var here //access it as $this->child_var } } class Child extends Parent { $child_var = 'hello'; } $child = new Child(); $child->do_something(); 

В основном у родителей вы не должны ссылаться на контент, специфичный для ребенка, потому что вы не можете быть уверены, что он будет там!

Если вам нужно, вы должны использовать абстракцию:

PHP-абстракция