2011-02-23 53 views
0

下面的代碼輸出在A類中設置的'x',我將如何在不改變B類的情況下輸出「在B類中設置的x」?在這種情況下後期靜態綁定如何工作?

<?php 

class A 
{ 
    public static $x = 'x as set in class A'; 

    public static function getX() 
    { 
     return self::$x; 
    } 
} 


class B extends A 
{ 
    public static $x = 'x as set in class B'; 
} 


echo B::getX(); 
+0

可只是爲了記錄在案,這是不是我問。 – 2011-07-04 14:54:13

回答

2

self總是指類,在那裏它被定義。你正在尋找的是「晚靜態綁定」(正如你已經建議,但不使用)。代碼塊中的static關鍵字指的是「實際」類,意思是:被調用類(XY::method())或調用對象的類($x->method())。

return static::$x; 

屬性聲明中的static關鍵字與LSB沒有任何關係。這只是對類屬性的通用聲明。

注意,即LSB是不是在PHP 5.3 <

+0

Ahhhh非常感謝。真棒回覆 – 2011-02-23 12:34:25

相關問題