Create a new instance in a static function of an abstract class

abstract-class, abstraction, instantiation, php

Solution

See this page in the manual:

Limitations of `self::`

Static references to the current class like `self::` or `__CLASS__` are resolved using the class in which the function belongs, as in where it was defined.

There is only an easy way around this using PHP >= 5.3 and late static bindings. In PHP 5.3 this should work:

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

Problem

``` 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(); ``` I want to create instances of a class from a static method defined in the abstract parent class but PHP tells me "Fatal error: Cannot instantiate abstract class ..." How should I implement it correctly? Edit: Of course I want to create instances of the class "user" in this case, not of the abstract class. So I've to tell it to create an instance of the called sub-class.

Original source