PHP能做一件相当简单的继承工作吗?

PHP能做一件相当简单的继承工作吗?,php,late-static-binding,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: Ca

我有以下代码:

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
因此,我基本上只想让
AbstractParent
test()
实例化调用该
test()
的类(因此,在我的示例中,实例化
SpecificClass
)。

您可以在PHP5.3中完成,PHP5.3仍然是alpha。您正在寻找的是所谓的后期静态绑定。您希望父类在静态方法中引用子类。你还不能做,但它就要来了


编辑:您可以在此处找到更多信息-

只有通过以下解决方法才能在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__);}
}

我最近看到很多人抱怨后期静态绑定,我很好奇:web开发中常用的其他哪些语言支持后期静态绑定?python红宝石?Perl?爪哇?都是,阿飞。在过去的几年中,我广泛地使用了Ruby。您不必对这两个静态方法进行不同的命名。您可以在两个类中都将它们称为“test”,并让SpecificClass::test返回parent::test。