我为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作为默认值。因为我不想将任何第三方依赖作为默认
答案 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();