访问父值

时间:2014-06-05 18:28:28

标签: 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 parent::getAttr();
    }
}

$object = new ClassB();
echo $object->getParentAttr(); //prints 'value2' instead of 'value1'

有没有办法让getParentAttr返回父属性的默认值,如ClassA中所声明的那样?

我尝试在self::$attr1方法中返回getAttr,但它会抛出未声明的静态属性错误。

1 个答案:

答案 0 :(得分:2)

默认情况下你不能这样做,在大多数情况下你不应该这样做。无论如何,显然有两种方法可以实现它。

<强> 1。使用新实例

最简单的方法是创建类的新实例并从中获取值。然而,这可能会产生副作用,在某些情况下可能无法实现。

<强> 2。使用反思

您可以使用反射获取属性的默认值。

$refl = new ReflectionClass("ClassA");
var_dump($refl->getDefaultProperties());

哪个应该导致:

array(1) {
    ["attr1"]=>
    string(6) "value1"
}