Ich baue eine ORM-Bibliothek mit Blick auf Wiederverwendung und Einfachheit. Alles geht gut, außer dass ich von einer dummen Erbschaftsbeschränkung festgefahren bin. Bitte beachten Sie den folgenden Code:
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 auch Sinn macht). Meine Frage ist also, ob ihr ein Mittel kennt, um in der Elternklasse den Namen der Kinderklasse zu erhalten.
debug_backtrace()
. Eine mögliche Lösung wäre die Verwendung einer späten statischen Bindung aus PHP 5.3, aber das ist in meinem Fall nicht möglich. Danke dir.