自 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 調用類的靜态屬性 有後期靜态綁定效果;