Мне нужен родительский класс для доступа к его дочерним свойствам:
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-абстракция