2012-01-26 133 views
0

我有一個抽象超類。PHP實例化繼承

abstract class SuperClass{ 

    public static function loadInstanceFromText(){ 

     $instance = new self(); 
     // do some stuff, etc. 
     return $instance; 

    } 

} 

明顯,調用該方法引用父類的時候是不可能的,但我也有一個孩子

class ChildClass extends SuperClass{ 

} 

我哪裏會想到它的工作。我稱之爲以下功能:

ChildClass::loadInstanceFromText(); 

但是,它不起作用,因爲super試圖實例化,而不是ChildClass。有沒有解決方法?因爲loadInstanceFromText是複雜的,但基本上在所有繼承中應該是相同的。

回答

2

關鍵字self表示聲明它的類。因此,在這種情況下,new self()將創建新的SuperClass,這是不可能的,因爲它是抽象的。

另一方面,關鍵字static代表調用類。這被稱爲「後期靜態綁定」,從版本5.3開始支持。因此,您可以使用new static(),它會按照您的預期創建新的ChildClass

+0

完美!工作! – arik