从超类中获取调用对象

时间:2015-11-26 09:49:29

标签: php oop model-view-controller object-oriented-analysis

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

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

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

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

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

由于您有效地保存了当前对象。

模型类扩展了一个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库,因为我想提供一个基于PDO的查询构建器和简单的ORM作为默认值。因为我不想将任何第三方依赖作为默认

1 个答案:

答案 0 :(得分:1)

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

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