【发布时间】:2013-11-13 19:58:36
【问题描述】:
在我的程序中,一个对象代表数据库中的一行,它具有所有相同的数据以及 setter 和 getter 等。
每一列的值都保存到对象内的一个属性中。例如:
class Person extends Base {
protected $name;
protected $age;
/* Setters & Getters */
}
在 Base 类上,我有一个 Save() 方法,它将根据 Person 类的属性创建更新查询。我无法弄清楚如何将属性传递给 Base 的 Save() 方法。我的想法很少,但我对它们不太满意。
1。 为所有属性添加前缀。比如“db_”:
protected $db_id;
protected $db_age;
Loop get_object_vars($this) and check the prefix.
- 令人困惑
- 丑
2。 添加一个数组,其中包含与数据库中的行相关的所有属性名称
protected $db_properties = array("id", "age");
protected $id;
protected $age;
Loop get_object_vars($this) and check if they are in the $db_properties array.
Or loop the $db_properties and get the properties.
- 双重相同数据
3。 假设所有属性始终与数据库中的行相关。
Loop get_object_vars($this).
- 无法为其他内容添加属性
还有其他方法可以做到这一点吗?
【问题讨论】:
-
嗯,这是一个多态性的好地方。我不知道是否有一种干净的方法可以完全按照您的意愿行事。当我不得不使用另一种程序语言来实现类似的功能时,我只是将
save()方法定义为虚拟,然后在需要的地方覆盖它。 -
这是 OP 正在使用的 PHP ORM 的一部分吗?
-
就像@Leron 建议的那样,我会在
Base中创建一个抽象方法,并在每个派生类中覆盖它。
标签: php oop properties