2

我有以下代码:

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

class SpecificClass extends AbstractParent {}

当我调用SpecificClass::test()时,我收到一个错误:

致命错误:无法实例化抽象类 AbstractParent

所以我基本上想要的只是让我们AbstractParent实例test()test()调用它的类(所以,在我的例子中,实例化SpecificClass)。

4

2 回答 2

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__);}
}
于 2008-12-15T02:37:51.570 回答
3

您可以在仍处于 alpha 阶段的 PHP 5.3 中执行此操作。您正在寻找的是所谓的后期静态绑定。您希望父类在静态方法中引用子类。你还做不到,但它来了……

编辑:您可以在此处找到更多信息 - http://www.php.net/manual/en/language.oop5.late-static-bindings.php

于 2008-12-15T02:29:52.757 回答