Soyut bir sınıf statik bir fonksiyonu yeni bir örneğini oluşturma

1 Cevap php
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();

Ben soyut üst sınıfında tanımlanmış statik bir yöntem bir sınıfın örneklerini oluşturmak istiyorum ama PHP bana söyler: Nasıl doğru uygulamak gerekir "ölümcül hata ... örneğini değil soyut sınıf?"

Edit: Tabii ki değil soyut bir sınıf, bu durumda sınıf "kullanıcı" örneklerini oluşturmak istiyorum. Yani denilen alt sınıfının bir örneğini oluşturmak için bunu söylemek ettik.

1 Cevap

this page kılavuzda bakınız:

self:: Sınırlamaları

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.

PHP> = 5.3 ve geç statik bağları kullanarak, bu etrafında sadece kolay bir yolu yoktur. PHP 5.3 'te bu çalışması gerekir:

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