php的繼承模型中有乙個存在已久的問題,那就是在父類中引用擴充套件類的最終狀態比較困難。我們來看一下**清單5-11中的例子。
**清單5-11 意想不到的繼承
php2
3class
parentbase
1213}14
15class
descendant
extends
parentbase
2021
echo
descendant
::render();
2223
parent value
在這個例子中,render()方法中使用了self關鍵字,這是指parentbase類而不是指descendant類。在parentbase::render()方法中沒法訪問$property的最終值。為了解決這個問題,需要在子類中重寫render()方法。
通過引入延遲靜態繫結功能,可以使用static作用域關鍵字訪問類的屬性或者方法的最終值,如**所示。
php2
3class
parentbase
1213}14
15class
descendant
extends
parentbase
2021
echo
descendant
::render();
2223
descendant value
通過使用靜態作用域,可以強制php在最終的類中查詢所有屬性的值。除了這個延遲繫結行為,php還新增了get_called_class()函式,這允許檢查繼承的方法是從哪個派生類呼叫的。以下**顯示了使用get_called_class()函式獲得當前的類呼叫場景的方法。
使用get_called_class()方法
php2
3class
parentbase
1011}12
13class
decendant
extends
parentbase {}
1415
echo
descendant
::render();
1617
descendant
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在這...