我有以下代码:
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
所以我基本上想要的是让AbstractParent
的{{1}}实例化调用此test()
的类(因此,在我的示例中,实例化test()
)
答案 0 :(得分: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__);}
}
答案 1 :(得分:3)
你可以在PHP 5.3中完成,它仍然是alpha版。您正在寻找的是称为Late-Static-Binding。您希望父类在静态方法中引用子类。你还做不到,但它即将来临......
修改:您可以在此处找到更多信息 - http://www.php.net/manual/en/language.oop5.late-static-bindings.php