思考:self關鍵字適用於類內部代替類的,代替的是當前所在的類本身,隨著繼承的實現,如果子類子訪問父類的方法的時候,self到底代替的是誰呢?
引入:self是一種靜態繫結,換言之即使當類進行編譯的時候seld已經明確繫結了類名,因此不論多少繼承,也不管是子類還是父類自己來進行訪問
self代表的都是當前類,如果想要選擇性的來支援來訪者,就需要使用靜態延遲繫結。
定義:靜態延遲繫結,即在類內部用來代表類本身的關鍵字部分不是在類編譯時固定好,而是當方法被訪問時動態的選擇來訪者所屬的類,靜態
延遲繫結就是利用static 關鍵字代替靜態繫結self,靜態延遲繫結需要使用到靜態成員的重寫。(跟$this比較像 )
1.靜態延遲繫結:使用static關鍵字代替self進行類成員訪問
<?phpclass
posen
}posen::show(); //
兩個都能輸出 posen 說明兩個呼叫都可以
?>
2.靜態延遲繫結一定是通過繼承後的子類來進行訪問才有效果
<?phpclass
posen}//
子類繼承
class man extends
posen
man::show(); //
還是顯示的posen 為什麼呢?不是說使用static 延遲繫結就能指向呼叫的類嗎?
// 因為你man類中沒有自己的靜態的屬性,所以它就向上一層去找 找到了posen
?>
注意:self關鍵字 --在你呼叫這個類載入到記憶體編譯的時候self就繫結了當前的類,而static 在編譯的時候則不會繫結,而是呼叫的時候在繫結呼叫的類
總結:1.靜態延遲繫結是指通過static關鍵字進行類靜態成員的訪問,是指在被訪問時才決定到底使用那個類
2.靜態延遲繫結對比的是靜態繫結self
3.靜態延遲繫結的意義是用來保證訪問的靜態成員是根據呼叫類的不同而選擇不同的表現
PHP延遲靜態繫結
1 self用法 self是指向定義它的當前類的指標。當前類 current class class person 獲取年齡 public static function getage 輸出 self name i am person self age 18 2 static用法 static是指向...
PHP延遲靜態繫結
所謂延遲靜態繫結,顧名思義,靜態呼叫時 符號左側的部分的的繫結是延遲,也就是說不再被解析為定義當前方法所在的類,而是在實際執行時計算的。class people public static function eat class fatguy extends people public static ...
PHP靜態延遲繫結
php版本5.3起增加了靜態延遲繫結,也稱遲繫結,主要用於在繼承範圍內引用靜態呼叫的類。簡單地來說 static 不再被解析為當前方法所定義的類,而是在實際執行時計算的。意外的繼承 class person class man extends person echo man say person在這...