推薦:《PHP影片教學》
自PHP 5.3.0 起,PHP 增加了一個叫做後期靜態綁定的功能,用於在繼承範圍內引用靜態呼叫的類別。
準確地說,後期靜態綁定工作原理是儲存了在上一個「非轉送呼叫」(non-forwarding call)的類別名稱。當進行靜態方法呼叫時,該類別名稱即為明確指定的那個(通常在 :: 運算子左側部分);當進行非靜態方法呼叫時,即為該物件所屬的類別。所謂的「轉送呼叫」(forwarding call)指的是透過以下幾種方式進行的靜態呼叫:self::
,parent::
,static::
以及forward_static_call()
。可用 get_called_class()
函數來得到被呼叫的方法所在的類別名,static:: 則指出了其範圍。
所謂的轉送呼叫是指:在類別的方法調用中轉送呼叫訊息
(可以理解為呼叫堆疊資訊)
轉送呼叫的時機
<?phpclass A{public static function foo(){ static::who();}public static function who(){ echo __CLASS__ . "\n";}}class B extends A{public static function test(){ //非转发调用 A::foo(); //转发调用 parent::foo(); //转发调用 self::foo();}public static function who(){ echo __CLASS__ . "\n";}}class C extends B{public static function who(){ echo __CLASS__ . "\n";}}//非转发调用C::test();
這句話的意思就是在程式運行過程中到底如何確認static是哪個類,確定規則是取上次儲存的非轉送呼叫的類
以上是詳解PHP物件導向之後期靜態綁定的詳細內容。更多資訊請關注PHP中文網其他相關文章!