2013-10-17 61 views
2

我有3個PHP類:抽象DBObject,組織擴展DBObject,大學擴展DBObject。從父項生成子對象

加載對象最後是來自DB的一組數據。 構造函數中的每一個知道如何將自己從陣列構建,所以我想這:

abstract class DBObject { 
    ... 
    public static function load($id) { 
     return new self(self::loader($id)); 
    } 
} 

自::裝載機($ id)的正確獲取數組。我可以將函數load()抽象並複製並粘貼到每個孩子的代碼中,但我希望有一種方法可以完成上述操作。目前的錯誤是:

PHP Fatal error: Cannot instantiate abstract class DBObject in /var/www/htdocs/classes/DBObject.php on line 16 
+2

'new static(...)' –

回答

1

你在找什麼叫做late static binding。取而代之的self要參考你的方法被從被稱爲類,所以切換到static關鍵字:

abstract class DBObject { 
    ... 
    public static function load($id) { 
     return new static(static::loader($id)); 
    } 
} 

現在從任何子類DBOBJECT裝載機功能的子類中調用時會叫做。

相關問題