php中「延遲靜態繫結」的使用

2021-06-22 10:37:50 字數 1126 閱讀 6237

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在這...