Получить вызывающий объект из суперкласса

Я построил «модельный» суперкласс для инфраструктуры MVC. В большинстве методов мне нужно только имя класса, поэтому я использовал get_called_class (), но для методов сохранения и редактирования мне нужно передать объект со значениями.

В моем дизайне, когда вы создаете модельный объект и сохраняете или редактируете его, вы должны сделать:

$object->save($object); или же $object->update($object, $id).

Мне действительно не нравится это, потому что выглядит как плохой дизайн. Я хотел бы просто сказать:

$object->save(); and $object->update($id);

Так как вы эффективно сохраняете текущий объект.

Классы Models расширяют родительский объект Model, который определяет их поведение и создает для них соединение с БД.

Методы суперкласса, которые я хотел бы создать, не принимают в качестве аргумента $ 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 по умолчанию. Потому что я не хочу иметь какую-либо стороннюю зависимость по умолчанию

0

Решение

Определите вашу базовую модель как абстрактный класс и наследуйте поведение по умолчанию от дочерних классов модели.

abstract class Model
{
public function save() {
return self::$db->save($this);
}

public function update($id) {
return self::$db->update($this, $id);
}
}

class UserModel extends Model;

$myModel = new UserModel();
$myModel->save();
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]