Php 访问父值
我有以下情况:Php 访问父值,php,attributes,parent,Php,Attributes,Parent,我有以下情况: class ClassA { protected $attr1 = 'value1'; public function getAttr() { return $this->attr1; } } class ClassB extends ClassA { protected $attr1 = 'value2'; public function getParentAttr() { return par
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
中声明的那样
我试图在
getAttr
方法中返回self::$attr1
,但它抛出了一个未声明的静态属性错误。默认情况下不能这样做,在大多数情况下不应该这样做。无论如何,显然有两种方法可以实现这一目标
1。使用新实例
最简单的方法是创建类的新实例并从中获取值。然而,这可能有副作用,在某些情况下可能不可能
2。使用反射
可以使用反射获取属性的默认值
$refl = new ReflectionClass("ClassA");
var_dump($refl->getDefaultProperties());
这将导致:
array(1) {
["attr1"]=>
string(6) "value1"
}
您正在重写
$attr1
并询问它为什么不是value1
…因此,如果我需要使用父值访问它的属性,我必须声明ClassA的新实例?$attr1
在这种情况下被替换。您无法访问它。不。你只是做错了,而且你在这里滥用了多态性