Tôi đang xây dựng một thư viện ORM có sử dụng lại và đơn giản trong tâm trí; mọi thứ đều tốt đẹp ngoại trừ việc tôi bị mắc kẹt bởi một giới hạn thừa kế ngu ngốc. Hãy xem xét các đoạn mã sau:Lấy tên của một lớp con trong lớp cha mẹ (ngữ cảnh tĩnh)
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();
Rõ ràng, đây không phải là hành vi của tôi đã mong (mặc dù hành vi thực tế cũng làm cho tinh thần) .. Vì vậy, câu hỏi của tôi là nếu các bạn biết một bình để có được, trong lớp cha, tên của lớp con.
Có, tôi chỉ đọc về 'debug_backtrace()' .. Một giải pháp có thể sẽ là sử dụng * ràng buộc tĩnh muộn * từ PHP 5.3 nhưng đó không phải là khả năng trong trường hợp của tôi. Cảm ơn bạn. – saalaa