2010-05-20 13 views
4
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(); 

Je veux créer des instances d'une classe à partir d'une méthode statique définie dans la classe mère abstraite, mais PHP me dit « Erreur fatale: Impossible instancier classe abstraite .. "Comment dois-je l'implémenter correctement? Edit: Bien sûr, je veux créer des instances de la classe "user" dans ce cas, pas de la classe abstraite. Donc je dois le dire pour créer une instance de la sous-classe appelée.Créer une nouvelle instance dans une fonction statique d'une classe abstraite

Répondre

9

Voir this page dans le manuel:

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.

Il n'y a qu'une façon facile de régler ce en utilisant PHP> = 5.3 et les liaisons statiques en retard. En PHP 5.3 cela devrait fonctionner:

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

+0

Merci! J'ai bien travaillé. – arno

+0

Indice: La classe get_called_class peut être émulée en PHP <5.3 en utilisant ce code: http://www.php.net/manual/fr/function.get-called-class.php#93799 – arno

1

ce travail pour moi ..

abstract class db_table { 

static function get_all_rows() { 
    ... 
     while(...) { 
      $rows[] = new static(); 
      ... 
     } 
     return $rows; 
    } 
}