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
在这种情况下被替换。您无法访问它。不。你只是做错了,而且你在这里滥用了多态性