PHP的繼承模型中有一個存在已久的問題,那就是在父類別中引用擴展類別的最終狀態比較困難。在PHP5.3之前會出現這種情況
1 php
2 4 5
static $property = '? public static function
render() { 8 9 return 11 }
12 13 } 14 15 class Descendant
extends Descendant extends
static $property
= ' Descendant Value';
18 19 } Descendant::render();22 在這個例子中,render()方法中使用了self關鍵字,這是指ParentBase類別而不是指Descendant類別。在ParentBase::render()方法中沒辦法存取$property的最終值。因為self關鍵字會在編譯時而不是執行時決定其作用域。為了解決這個問題,PHP5.3對這個問題做了補救,重新指定了static關鍵字的作用,需要在子類別中重寫render()方法。 透過引入延遲靜態綁定功能,可以使用static作用域關鍵字存取類別的屬性或方法的最終值,如程式碼所示。 1
php 2 3
3 🜎 5 static
$property
= '
Parent Value'; 6 ic
function render() { 8 9 return static::$ 12 13
}14 15 class Descendant extends ParentBase {
$property = 'Descendant Value' ;18
19 }20
21 20 212 ();
22 透過使用靜態作用域,可以強制PHP在最終的類別中找出所有屬性的值。除了這個延遲綁定行為
以上就介紹了php中的繼承和延遲靜態綁定的問題,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。