在舊版php中返回本類的乙個例項使用的return new self(); 但是這個方法有很大的弊端,就是self指的是解析上下文而不是呼叫的上下文。
abstract class father
} class son1 extends father
son1::create();
也就是說上述**中子類呼叫create()方法其實是返回乙個父類的例項,因為self指向它定義的地方而不是呼叫的地方,並且father類是抽象類,則這段**會報乙個致命錯誤。
在php5.3以後引入了延遲靜態繫結,使用static關鍵字。
abstract class father
} class son1 extends father
son1::create();
將self改為static就能正常執行,因為static指向被呼叫的類而不是定義的類。
我們還可以使用static作為靜態方法的識別符號,甚至是從非靜態上下文中呼叫。這個以後再寫吧。
如果你對php中的private、protected、public這三個關鍵字不是太理解的話可以參考這個回答
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在這...