2011-05-04 58 views
0

我已經看到這個問題很多我認爲它已經與遲到的靜態綁定todo,但是這樣做的重點是什麼。

class { 
    public static $name = array(); 

    function something() { 
     static::$name; 
    } 
} 

class { 
    public static $name = array(); 

    function something() { 
     self::$name; 
    } 
} 

回答

2

self::$name在父類將總是引用父類的屬性,而static::$name在父類將指運行時類的屬性。

例如

class A 
{ 
    protected static $foo = 'foo'; 

    public static function getSelfFoo() 
    { 
     return self::$foo; 
    } 

    public static function getStaticFoo() 
    { 
     return static::$foo; 
    } 
} 

class B extends A 
{ 
    protected static $foo = 'bar'; 
} 

echo A::getSelfFoo(); // 'foo' 
echo A::getStaticFoo(); // 'foo' 

echo B::getSelfFoo(); // 'foo' 
echo B::getStaticFoo(); // 'bar' 
+0

感謝菲爾幫助,所以使用static :: $名稱是不好的,即使該類永遠不會有孩子? – 2011-05-04 07:09:16

+0

@ChrisR Nope。使用'static'或'self'完全取決於你想要訪問的屬性或方法 – Phil 2011-05-04 07:12:41

0

,如果你創建類的子類事項。在第一個示例中,something函數將引用子類上的$name變量。在第二個例子中,它將引用基類中的$name變量。