天天看點

php 後期靜态綁定 static 關鍵字的另一種用法

自 PHP 5.3.0 起,PHP 增加了一個叫做後期靜态綁定的功能,用于在繼承範圍内引用靜态調用的類。 雖然也可以調用非靜态方法,但是不會在運作時綁定。

static 不再隻是簡單的靜态修飾關鍵字。而是可以像下面這樣調用類的靜态方法,非靜态方法,為什麼靜态非靜态要分開說呢,因為調用的效果是不一樣的。

<?php
class  A  {
    public static function  who () {
        echo  __CLASS__ ;
    }
    public static function  test () {
        static:: who ();  // 後期靜态綁定從這裡開始
     }
}

class  B  extends  A  {
    public static function  who () {
        echo  __CLASS__ ;
    }
}

B :: test ();
?>      

如上代碼:B調用test方法,test方法調用who方法。而B類中重寫了who方法,則實際調用的是B中的who方法,是以輸出的__CLASS__是B  這就是說 static 調用的

靜态方法會在運作時自動判斷調用誰的方法。而self則隻會調用定義它時所在的類中的方法。這是static的一個差別于其它調用的一個新特性。而static調用

非靜态方法時則不會達到這種後期綁定的效果,是以叫後期靜态綁定。

還有就是 static隻能調用靜态屬性。

總結:

綜上所述,static關鍵字可以實作以下功能:

1 調用類的靜态方法   有後期靜态綁定效果;

2 調用類的靜态屬性   有後期靜态綁定效果;

繼續閱讀