php版本5.3起增加了靜態延遲繫結,也稱遲繫結,主要用於在繼承範圍內引用靜態呼叫的類。簡單地來說:static::不再被解析為當前方法所定義的類,而是在實際執行時計算的。
// 意外的繼承
class person
}class man extends person
echo man::say(); // person
在這個例子中,say()方法使用了 self 關鍵字,指的是 person 類而不是 man 類,所以 person::say() 方法中無法訪問靜態變數最終值,但是有了靜態延遲繫結,這個問題就可以得到解決了。
class person2
}class man2 extends person2
echo man2::say(); // man
新增了靜態延遲繫結後,當 man2 呼叫靜態方法 say() 時,static:: 會被解析為 man2,而不是 say() 方法的定義類 person。
如果靜態方法呼叫 parent:: 或者 self::,將**呼叫資訊。
// 官網示例:
class a
public static function who()
}class b extends a
public static function who()
}class c extends b
}c::test(); // a c c
當呼叫 a::foo()時,static::解析到的是 a,當呼叫 parent:: 和 self:: 時,因為**機制,static::被解析為當前實際呼叫類,也就是 c ,所以 parent::foo() = 『c』,self::foo() = 『c』
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的延遲靜態繫結
先說下定義 就是把本類在定義階段固定下來的表示式或者變數,改在執行階段才決定。這個是為了解決下面 的問題才引入的 class parents class child extends parents echo child render parents可以看到我們使用self關鍵字只能夠訪問到該類中的靜...