所謂延遲靜態繫結,顧名思義,靜態呼叫時::符號左側的部分的的繫結是延遲,也就是說不再被解析為定義當前方法所在的類,而是在實際執行時計算的。
<?php執行class people
public static function eat()
}class fatguy extends people
public static function eat()
}class thinguy extends people
public static function eat()
}thinguy::hungry();
fatguy::hungry();
如果將第六行的static換成self,執行就是繫結的當前方法所在的類,而不是靜態呼叫的類。
注意,只有在使用以下幾種方式進行的靜態呼叫:self::,parent::,static:: 以及 forward_static_call()時才會**呼叫。**呼叫即將當前的呼叫者傳遞給後面呼叫的方法。
以官網的例項來解釋一下:
<?php通過self::,parent::,static:: 以及 forward_static_call()呼叫時,呼叫者會被繼續**。故輸出:class a
public static function who()
}class b extends a
public static function who()
}class c extends b
}c::test();
PHP延遲靜態繫結
1 self用法 self是指向定義它的當前類的指標。當前類 current class class person 獲取年齡 public static function getage 輸出 self name i am person self age 18 2 static用法 static是指向...
PHP靜態延遲繫結
php版本5.3起增加了靜態延遲繫結,也稱遲繫結,主要用於在繼承範圍內引用靜態呼叫的類。簡單地來說 static 不再被解析為當前方法所定義的類,而是在實際執行時計算的。意外的繼承 class person class man extends person echo man say person在這...
php的延遲靜態繫結
先說下定義 就是把本類在定義階段固定下來的表示式或者變數,改在執行階段才決定。這個是為了解決下面 的問題才引入的 class parents class child extends parents echo child render parents可以看到我們使用self關鍵字只能夠訪問到該類中的靜...