2008-12-15 20 views
2

我有以下代碼:PHP能做一個相當平凡的繼承嗎?

abstract class AbstractParent { 
function __construct($param) { print_r($param); } 
public static function test() { return new self(1234); } 
} 

class SpecificClass extends AbstractParent {} 

當我調用SpecificClass::test(),我得到一個錯誤:

Fatal error: Cannot instantiate abstract class AbstractParent

所以我基本上要只是讓AbstractParenttest()實例化類,其中這test()被調用(因此,在我的示例中,實例化SpecificClass)。

+0

我我一直在看到人們對最近的靜態綁定抱怨很多,我很好奇:常用於Web開發的其他語言*支持後期靜態綁定?蟒蛇?紅寶石? Perl的? Java的? – 2008-12-15 02:39:08

+0

所有這些,afair。過去幾年我廣泛使用Ruby。 – 2008-12-15 02:46:33

回答

4

此前5.3版本只有以下解決方法:

abstract class AbstractParent { 
function __construct($param) { print_r($param); } 
abstract public static function test(); 
private static function test2($classname) { return new $classname(1234); } 
} 

class SpecificClass extends AbstractParent { 
public static function test() {return self::test2(__CLASS__);} 
}