我有一组类保存数据库的状态。它就像一个微型ORM模式。因此,对于这个解决方案,我在几桌动态属性的类的结构加载,使得类看起来是这样的:动态创建私有变量?
- 对象
- [tbl_name]
- ATTRIBUTE1
- attribute2
- attribute3
- [tbl_name]
- ATTRIBUTE1
- attribute2
- attribute3
- [tbl_name]
所有的属性是公共属性,因为我有这样的设置他们:
$object->{$table_name}->{$attribute} = 'foobar';
我”什么d就像这些动态设置的属性一样是私人的。为什么?因为,请不要错过这里的讽刺,我想通过使用__get()和__set()的重载getter/setter让它们再次公开。我们再次回到原因的问题。实际上,“获得”我可以用公共财产罚款,但为了设置我想在应用设置之前应用一些逻辑。这里是我简化的__set()函数,它让你知道我想要实现什么:
public function __set ($property , $value) {
if (!in_array ($property , $blocked_properties)) {
$this->property = $value;
$this->trigger_event ($property);
}
}
有意义吗?我很高兴通过其他方式解决这个问题,但是如果我只能动态地设置私有实例变量,这看起来像是一种非常优雅的方式。
为什么不使用“真正的”ORM像教条2? http://www.doctrine-project.org/ –
学习曲线。矫枉过正。灵活性。不知道最后一个,但我有一些想法,我想将我的Enum对象分配给可能不支持ORM的属性等。 – ken