从超类中获取调用对象
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();
我已经为 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();