PHP可以做一个相当简单的继承事吗?

时间:2008-12-15 02:25:31

标签: php late-static-binding

我有以下代码:

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()

2 个答案:

答案 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