2

我有 3 个 PHP 类:抽象 DBObject,组织扩展 DBObject,大学扩展 DBObject。

加载对象最终会得到来自数据库的数据数组。每个构造函数都知道如何从该数组构建自己,所以我尝试了这个:

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

您正在寻找的是所谓的后期静态绑定。而不是self你想引用你的方法被调用的类,所以切换到static关键字:

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

现在,当从 DBObject 的任何子类调用时,将调用子类上的加载器函数。

于 2013-10-17T19:12:47.427 回答