मैं एक 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 से देर से स्थिर बंधन का उपयोग करना होगा लेकिन मेरे मामले में यह संभावना नहीं है। धन्यवाद।