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