在父類的構造函數,做這樣的事情:
<?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()
功能,這將返回在特定的類中設置的屬性,無論價值設置在兒童班。
如果你想獲得與該函數的父類值,你可以做任何的從父類本身如下:get_class_vars(__CLASS__)
或get_class_vars(get_class())
如果你想獲得ChildClass值,你可以做以下來自ParentClass或ChildClass:get_class_vars(get_class($this))
,儘管這與訪問$this->var_name
(顯然,這取決於變量範圍)相同。
好吧我想我找到了一個使用反射的解決方案。在A的構造函數中,我可以這樣做:`$ r = new ReflectionClass();提取($ r-> getDefaultProperties());` – 2011-02-15 23:55:32