Ich baue eine ORM-Bibliothek mit Wiederverwendung und Einfachheit; Alles geht gut, außer dass ich an einer dummen Vererbungsbeschränkung festhalte. Bitte beachten Sie den Code unten:Abrufen des Namens einer untergeordneten Klasse in der übergeordneten Klasse (statischer Kontext)
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();
Offensichtlich ist dies nicht das Verhalten, das ich erwartet hatte (obwohl das tatsächliche Verhalten ist auch sinnvoll) .. Also meine Frage ist, ob ihr von einem mittleren kennen zu lernen, in der Elternklasse, der Name der Kindklasse.
Ja, ich 'debug_backtrace nur lesen()' .. Eine mögliche Lösung * später statische Bindung * von PHP 5.3, aber das ist nicht eine Möglichkeit, in meinem Fall wäre die Verwendung. Vielen Dank. – saalaa