我有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
答案 0 :(得分:1)
您要找的是late static binding。您想要引用正在调用方法的类,而不是self
,所以切换到static
关键字:
abstract class DBObject {
...
public static function load($id) {
return new static(static::loader($id));
}
}
现在从DBObject的任何子类调用时,将调用子类的加载器函数。