Je construis une bibliothèque ORM avec la réutilisation et la simplicité à l'esprit; tout va bien sauf que je suis coincé par une stupide limitation d'héritage. Veuillez considérer le code ci-dessous:
class BaseModel {
/*
* Return an instance of a Model from the database.
*/
static public function get (/* varargs */) {
// 1. Notice we want an instance of User
$class = get_class(parent); // value: bool(false)
$class = get_class(self); // value: bool(false)
$class = get_class(); // value: string(9) "BaseModel"
$class = __CLASS__; // value: string(9) "BaseModel"
// 2. Query the database with id
$row = get_row_from_db_as_array(func_get_args());
// 3. Return the filled instance
$obj = new $class();
$obj->data = $row;
return $obj;
}
}
class User extends BaseModel {
protected $table = 'users';
protected $fields = array('id', 'name');
protected $primary_keys = array('id');
}
class Section extends BaseModel {
// [...]
}
$my_user = User::get(3);
$my_user->name = 'Jean';
$other_user = User::get(24);
$other_user->name = 'Paul';
$my_user->save();
$other_user->save();
$my_section = Section::get('apropos');
$my_section->delete();
Évidemment, ce n'est pas le comportement auquel je m'attendais (bien que le comportement réel ait également du sens). Ma question est donc de savoir si vous connaissez un moyen d'obtenir, dans la classe parent, le nom de la classe enfant.
debug_backtrace()
.. Une solution possible serait d'utiliser la liaison statique tardive de PHP 5.3 mais ce n'est pas une possibilité dans mon cas. Je vous remercie.