如何从孩子那里获得父母被覆盖的财产?

时间:2013-10-30 05:22:23

标签: php oop parent-child

在php文档中说:

  

范围解析运营商(也称为Paamayim Nekudotayim)或   更简单的术语,双冒号,是一个允许访问的标记   静态,常量和重写属性或类的方法。

当我尝试访问重写(非静态)父属性时出现错误:

class foo
{
    public $bar = 'foobar';
}

class baz extends foo
{
    public $bar = 'bazbar';

    public function get_bar()
    {
        echo parent::$bar; //Fatal error:  Access to undeclared static property: foo::$bar
    }
}

$baz = new baz;
$baz->get_bar();

2 个答案:

答案 0 :(得分:1)

Fisrt,将::与静态属性一起使用,而不是实例属性 其次,尽管你可以使用Reflection(参见下面的代码),但我没有看到任何访问父实例属性的点,polymorphism用于。{/ p>

class foo
{
    public $bar='foobar';
}
class bar extends foo
{
    public $bar='bazbar';
    function get_bar()
    {
        $thisClass = new ReflectionClass($this);
        $parentClass = $thisClass->getParentClass();
        $props = $parentClass->getDefaultProperties();
        return $props['bar'];
    }
}

$b = new bar();
echo $b->get_bar(); // foobar

答案 1 :(得分:0)

class foo
{
  public $bar = 'foobar';
}

制作$ bar静态变量。 您可以使用解析运算符(::)

访问静态成员变量,函数