从超类中获取调用对象


Get the calling object from superclass

我为MVC框架构建了一个"模型"超类。在大多数方法中,我只需要类名,所以我使用了get_called_class(),但对于保存和编辑方法,我需要传递带有值的对象。

在我的设计中,当你创建一个模型对象并保存或编辑时,你必须做:

$object->save($object);$object->update($object, $id).

我真的不喜欢这个,因为看起来设计不好。我只想说:

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

因为您正在有效地保存当前对象。

Models类扩展了定义其行为并为其创建DB连接的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库的使用,因为我想提供一个querybuilder和简单的ORM,默认情况下它是基于PDO的。因为我不想有任何第三方依赖作为默认

将基本模型定义为抽象类,并将默认行为继承到子模型类。

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();