abstract class db_table {
static function get_all_rows() {
...
while(...) {
$rows[] = new self();
...
}
return $rows;
}
}
class user extends db_table {
}
$rows = user::get_all_rows();
我想从抽象父类中定义的静态方法创建类的实例,但PHP告诉我“致命错误:无法实例化抽象类......”我应该如何正确实现它?
编辑:当然我想在这种情况下创建类“user”的实例,而不是抽象类的实例。所以我要告诉它创建一个被调用的子类的实例。
答案 0 :(得分:10)
请参阅手册中的this page:
的限制
self::
对当前类的静态引用 像
self::
或__CLASS__
已解决 使用其中的函数类 属于,如在其定义的地方。
使用PHP> = 5.3和后期静态绑定只有一个简单的方法。在PHP 5.3中,这应该有效:
static function get_all_rows() {
$class = get_called_class();
while(...) {
$rows[] = new $class();
...
}
return $rows;
}
答案 1 :(得分:3)
这项工作对我来说..
true