2012-06-24 85 views
0

我的一些PHP域对象具有的属性应该从对象外部设置,但仅限于某些客户端对象。我该如何去执行这个?如何仅允许授权客户端访问对象属性

我在课堂上使用setter,并提供了一种方法来区分不同的调用者,我确信我可以在setter中进行一些检查。这看起来有些复杂。我感觉我会违反OO设计原则(也许“告诉,不要问”?)。

我想这是一个相当普遍的情况。我错过了什么?

+0

我认为一个好的ACL也会帮助我。 –

回答

0

在这种情况下,这是一个糟糕的设计。你会违反班级的单一责任原则。相反,将代码重构为多个类,但使用组合来附加可选属性。

例如:

class MyDataObject { 
    private $main_property; 
    private $extended_property; 

    /* ... getters/setters for $main_property. */ 
    public function set_extended_property(IExtendedProperty $property) { 
     $this->extended_property = $property; 
    } 
} 

哪里IExtendedProperty是为自定义属性数据的接口。

+0

嗨,Joshua,不知道你的意思。这里你在主类中使用了一个setter,这正是我目前正在做的。你不区分不同的来电者。任何客户都可以打电话给你的设定者...... –

+0

判别来电者的问题是:你的班级不应该对他们的方法调用有什么看法。调用者使用自定义属性创建对象的新实例,或者将自定义数据注入类的实例(如上面的代码),而不是尝试过滤和控制方法调用。 – jmkeyes

相关问题