PHP延遲靜態繫結

2022-04-16 13:37:23 字數 814 閱讀 6918

所謂延遲靜態繫結,顧名思義,靜態呼叫時::符號左側的部分的的繫結是延遲,也就是說不再被解析為定義當前方法所在的類,而是在實際執行時計算的。

<?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 

class a

public static function who()

}class b extends a

public static function who()

}class c extends b

}c::test();

通過self::,parent::,static:: 以及 forward_static_call()呼叫時,呼叫者會被繼續**。故輸出:

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關鍵字只能夠訪問到該類中的靜...