2013-10-30 145 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 –

相關問題