我有以下情况:
class ClassA {
protected $attr1 = 'value1';
public function getAttr() {
return $this->attr1;
}
}
class ClassB extends ClassA {
protected $attr1 = 'value2';
public function getParentAttr() {
return parent::getAttr();
}
}
$object = new ClassB();
echo $object->getParentAttr(); //prints 'value2' instead of 'value1'
有没有办法让getParentAttr
返回父属性的默认值,如ClassA
中所声明的那样?
我尝试在self::$attr1
方法中返回getAttr
,但它会抛出未声明的静态属性错误。
答案 0 :(得分:2)
默认情况下你不能这样做,在大多数情况下你不应该这样做。无论如何,显然有两种方法可以实现它。
<强> 1。使用新实例
最简单的方法是创建类的新实例并从中获取值。然而,这可能会产生副作用,在某些情况下可能无法实现。
<强> 2。使用反思
您可以使用反射获取属性的默认值。
$refl = new ReflectionClass("ClassA");
var_dump($refl->getDefaultProperties());
哪个应该导致:
array(1) {
["attr1"]=>
string(6) "value1"
}