从父级构建子对象

时间:2013-10-17 18:44:49

标签: php

我有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

1 个答案:

答案 0 :(得分:1)

您要找的是late static binding。您想要引用正在调用方法的类,而不是self,所以切换到static关键字:

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

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