在抽象类的静态函数中创建新实例

时间:2010-05-20 12:09:08

标签: php abstract-class abstraction instantiation

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”的实例,而不是抽象类的实例。所以我要告诉它创建一个被调用的子类的实例。

2 个答案:

答案 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;
    }

http://php.net/manual/en/function.get-called-class.php

答案 1 :(得分:3)

这项工作对我来说..

true