2012-06-24 135 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

相關問題