1. 程式人生 > >php 後期靜態繫結 static 關鍵字的另一種用法

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 呼叫類的靜態屬性   有後期靜態繫結效果;

3 呼叫類的非靜態方法  沒有後期靜態繫結效果;

4 強調一下 不可以呼叫非靜態屬性;