首頁  >  文章  >  後端開發  >  php中的繼承和延遲靜態綁定的問題

php中的繼承和延遲靜態綁定的問題

WBOY
WBOY原創
2016-08-08 09:26:46781瀏覽

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
 


$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教程有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn