В конструкторе вашего родительского класса сделайте что-то вроде этого:
<?php
abstract class ParentClass {
protected $foo = array(
'bar' => 'Parent Value',
'baz' => 'Some Other Value',
);
public function __construct( ) {
$parent_vars = get_class_vars(__CLASS__);
$this->foo = array_merge($parent_vars['foo'], $this->foo);
}
public function put_foo( ) {
print_r($this->foo);
}
}
class ChildClass extends ParentClass {
protected $foo = array(
'bar' => 'Child Value',
);
}
$Instance = new ChildClass( );
$Instance->put_foo( );
// echos Array ( [bar] => Child Value [baz] => Some Other Value )
По сути, магия исходит от функции get_class_vars( )
, которая будет возвращать свойства, которые были установлены в этом конкретном классе, независимо от значений, установленных в дочерних классах.
Если вы хотите получить значения ParentClass с помощью этой функции, вы можете выполнить одно из следующих действий из самого ParentClass: get_class_vars(__CLASS__)
или get_class_vars(get_class( ))
Если вы хотите получить значения ChildClass, вы можете сделать следующее из ParentClass или ChildClass: get_class_vars(get_class($this))
, хотя это то же самое, что просто получить доступ к $this->var_name
(очевидно, это зависит от области видимости переменной) .