2013-10-30 98 views
1

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(); 

回答

1

Fisrt,使用::具有静态属性,而不是实例属性。其次,虽然你可以用Reflection来做到这一点(参见下面的代码),但是我没有看到访问父实例属性的任何点,这就是polymorphism

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 
0
class foo 
{ 
    public $bar = 'foobar'; 
} 

将$酒吧静态变量。 您可以访问静态成员变量,函数使用分辨率运算符(::)

+0

$ this-> bar from the child will give you bazbar,not foobar –

相关问题