2

私は3つのPHPクラスを持っています.abstract DBObject、Organization extends DBObject、University extends DBObjectです。

オブジェクトをロードすると、DB からのデータの配列が得られます。各コンストラクターは、その配列から自分自身を構築する方法を知っているので、これを試しました:

abstract class DBObject {
    ...
    public static function load($id) {
        return new self(self::loader($id));
    }
}

self::loader($id) は正しく配列を取得します。関数 load() を抽象化し、このコードをコピーして各子に貼り付けることができますが、上記を行う方法があることを望んでいました。現在のエラーは次のとおりです。

PHP Fatal error:  Cannot instantiate abstract class DBObject in /var/www/htdocs/classes/DBObject.php on line 16
4

1 に答える 1

1

あなたが探しているものは、late static bindingと呼ばれます。メソッドが呼び出されているクラスを参照する代わりに、次のキーワードselfに切り替えます。static

abstract class DBObject {
    ...
    public static function load($id) {
        return new static(static::loader($id));
    }
}

DBObject のサブクラスから呼び出されると、サブクラスのローダー関数が呼び出されます。

于 2013-10-17T19:12:47.427 に答える