저는 재사용과 단순성을 염두에두고 ORM 라이브러리를 구축하고 있습니다. 어리석은 상속 제한에 갇힌 것을 제외하고는 모든 것이 잘됩니다. 아래 코드를 고려하십시오.
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();
분명히, 이것은 내가 기대했던 행동이 아닙니다 (실제 행동도 의미가 있지만). 그래서 내 질문은 여러분이 부모 클래스에서 자식 클래스의 이름을 얻는 방법을 알고 있는지 여부입니다.
debug_backtrace()
. .. 가능한 해결책은 PHP 5.3에서 늦은 정적 바인딩 을 사용하는 것이지만 제 경우에는 그럴 가능성이 없습니다. 감사합니다.