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

まだアルファ版の PHP 5.3 で実行できます。あなたが探しているのは、Late-Static-Binding と呼ばれるものです。親クラスが静的メソッドで子クラスを参照するようにします。あなたはまだそれをすることができませんが、それは来ています...

編集: ここで詳細情報を見つけることができます - http://www.php.net/manual/en/language.oop5.late-static-bindings.php

于 2008-12-15T02:29:52.757 に答える