在舊版PHP中傳回本類別的一個實例所使用的return new self(); 但是這個方法有很大的弊端,就是self指的是解析上下文而不是呼叫的上下文。 本文主要和大家分享PHP延遲靜態綁定static詳解,希望能幫助大家。
abstract class father { public static function create() { return new self(); } } class son1 extends father { } son1::create();
也就是說上述程式碼中子類別呼叫create()方法其實是傳回一個父類別的實例,因為self指向它定義的地方而不是呼叫的地方,而father類別是抽象類別,則這段程式碼會報一個致命錯誤。 <br>
在PHP5.3以後引入了延遲靜態綁定,使用static關鍵字。 <br>
abstract class father { public static function create() { return new static(); } } class son1 extends father { } son1::create();
將self改為static就能正常執行,因為static指向被呼叫的類別而不是定義的類別。 <br>
我們也可以使用static作為靜態方法的標識符,甚至是從非靜態上下文中呼叫。這個以後再寫吧。
相關推薦:
以上是PHP延遲靜態綁定static詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!