我有一组保存数据库状态的类。这就像一个微 ORM 模式。因此,对于这个解决方案,我将一些表的结构加载为类的动态属性,以便类看起来像:
- 目的
- [tbl_name]
- 属性1
- 属性2
- 属性3
- [tbl_name]
- 属性1
- 属性2
- 属性3
- [tbl_name]
所有属性都是公共属性,因为我使用以下内容设置它们:
$object->{$table_name}->{$attribute} = 'foobar';
我想要的是这些动态设置的属性是私有的。为什么?好吧,因为,请不要错过这里的讽刺意味,我想通过使用 __get() 和 __set() 的重载 getter/setter 再次将它们公开。我们再次回到为什么的问题。实际上,对于“获取”,我对公共属性会很好,但是对于设置,我想在允许设置之前应用一些逻辑。这是我简化的 __set() 函数,它让您了解我想要实现的目标:
public function __set ( $property , $value ) {
if ( !in_array ($property , $blocked_properties) ) {
$this->property = $value;
$this->trigger_event ( $property );
}
}
有道理?我很高兴以其他方式解决这个问题,但如果我可以动态设置私有实例变量,这似乎是一种非常优雅的方式。