Я построил «модельный» суперкласс для структуры MVC. В большинстве методов мне нужно только имя класса, поэтому я использовал get_called_class(), но для методов сохранения и редактирования мне нужно передать объект со значениями.Получить вызывающий объект из суперкласса
В моей конструкции, при создании модели объекта и сохранения или редактирования вы должны сделать:
$object->save($object);
или $object->update($object, $id).
Я действительно не нравится это, потому что выглядит как плохой дизайн. Я хотел бы просто сказать:
$object->save(); and $object->update($id);
Поскольку вы эффективно сохраняете текущий объект.
Модели классов расширяет родительский элемент модели, который определяет их поведение и создает для них соединение с БД.
Методы суперкласса, которые я хотел бы сделать, не воспринимаются как аргумент $ object, но я бы хотел сказать «получить вызывающий объект».
public function save($object) {
return self::$db->save($object);
}
public function update($object,$id) {
return self::$db->update($object, $id);
}
Я знаю, что это может быть легко выполнимо в объектной модели с
public function save() {
parent::save($this);
}
Но я не хотел бы иметь переопределять это поведение для каждой модели!
Заранее спасибо. Использование любой существующей библиотеки ORM здесь не обсуждается, так как я хочу предоставить построитель запросов и простой ORM, основанный на PDO по умолчанию. Потому что я не хочу иметь зависимость от третьей стороны по умолчанию
Почему бы не использовать библиотеки ORM? Их много с реализациями ActiveRecord или DataMapper. http://propelorm.org/ http://www.doctrine-project.org/, чтобы назвать несколько. –