আমি পুনরায় ব্যবহার এবং সরলতার কথা মাথায় রেখে একটি 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()
.. একটি সম্ভাব্য সমাধান হ'ল পিএইচপি 5.3 থেকে দেরি স্ট্যাটিক বাইন্ডিং ব্যবহার করা হবে তবে এটি আমার ক্ষেত্রে সম্ভাবনা নয়। ধন্যবাদ.