Estoy creando una biblioteca ORM pensando en la reutilización y la simplicidad; todo va bien, excepto que me quedé atrapado por una estúpida limitación de herencia. Por favor, considere el siguiente código:Obteniendo el nombre de una clase hija en la clase padre (contexto estático)
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();
Obviamente, este no es el comportamiento que yo esperaba (aunque el comportamiento real también tiene sentido) .. Así que mi pregunta es si ustedes saben de un medio para obtener, en el clase de padres, el nombre de la clase de niños.
Sí, acabo de leer sobre 'debug_backtrace()' .. Una posible solución sería usar * enlace estático tardío * de PHP 5.3, pero esa no es una posibilidad en mi caso. Gracias. – saalaa