2013-01-08 52 views
3

讓我們假設我有一個類Test,它具有一個名爲$_list的私有屬性,以及一個公共setter。
公用設置器用於從外部設置屬性值。我應該使用公共setter來設置類中的私有屬性值嗎?

class Test { 
    private $_list; 

    public function getList() { 
     return $this->_list; 
    } 

    public function setList($list) { 
     $this->_list = $list; 
    } 

    public function initialize() { 
     $list = array(); 

     /* ... Some code that fills the $list with values etc. ... */ 

     // 1) Set value directly 
     $this->_list = $list; 

     // 2) Use public setter 
     $this->setList($list); 
    } 
} 

問題是 - 我需要使用公共setter來設置類中的私有屬性值嗎?
哪種方式更好 - #1或#2?爲什麼?
你喜歡哪種方式? 我希望看到一個完整的答案,解釋每種方式的優缺點。

謝謝。

+5

兩者都很好。函數調用的開銷很小,但不足以產生影響。除此之外,在這種情況下它們基本相同。使用該函數的一個好處是,如果在設置變量時使用了額外的邏輯,在這種情況下,它將保持事物一致,而不需要複製代碼。 –

+0

公共訪問私有變量有什麼意義? O_O –

+0

@AlexLunix可能有各種各樣的原因,而不是給出的例子,但是如果(根據我的評論)有更多的邏輯,比如驗證價值,那麼你不希望人們直接設置他們喜歡的任何值對象屬性,你希望他們通過驗證。 –

回答

1

正如上面所寫,兩者都可以接受,但正確的答案是:而是使用直接屬性訪問,但有時您最好使用setter。

數量1,(屬性訪問)優點:

  • 易讀和略低更快
  • 給你的辦法,這是對象的簡單屬性

數量2,(優點:

  • 你可以做設置屬性的自定義操作(例如初始化其他屬性s,緩存或調用參數對象上的方法)
  • 您將該屬性視爲該類的子元素,該元素可能具有自己的邏輯實現。

我認爲提出使用變量沒有邏輯是更重要的。 如果很簡單,使它看起來很簡單。如果不是,您仍然可以使用setter。

你也可以就吸氣劑和財產訪問問一樣,上面也適用。

+0

謝謝你的回答,GaborSch。讓我們稍微等一下,看看是否有更多的人想分享這些意見。如果沒有比你更好的答案,我會接受你的答案。 –

+0

謝謝!實際上,所有面向對象的語言都是如此,不僅適用於PHP。 – gaborsch

相關問題