从超类中获取调用对象

Get the calling object from superclass

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

在我的设计中,当您创建模型对象并保存或编辑时,您必须执行以下操作:

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

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

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

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

模型 classes 扩展了定义其行为并为它们创建数据库连接的模型父级。

我想做的 superclass 的方法不作为参数 $object 而是我想说 "get the calling 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 库的使用,因为我想提供一个默认基于 PDO 的查询构建器和简单 ORM。因为我不想默认有任何第三方依赖

将您的基础模型定义为抽象 class 并将默认行为继承给子模型 classes。

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