2013-08-28 35 views
2

我看到(寫)大量的代碼被人看不起這樣的:爲什麼不能我只是使用公共財產,而不是在

class MyClass 
{ 
    private $_myProperty; 

    public function setMyPropert($myProperty) 
    { 
     $this->_myProperty = $myProperty; 
    } 

    public function getMyProperty() 
    { 
     return $this->_myProperty; 
    } 
} 

因爲我們被教導類的屬性應該始終是私有的。

但是,我真的只是想做到這一點在上述情形:

class MyClass 
{ 
    public $myProperty; 
} 

那更少的代碼,更易於閱讀。但其他開發人員會忽視這些代碼,很可能會導致代碼審查失敗等。即使不是這樣,我仍然不會這樣做,因爲害怕別人看到它並做出判斷。

爲什麼?這是否只是在oop代碼的開發者中根深蒂固?還是還有另一個原因,我錯過了,可能與測試,未來維護或其他非顯而易見的技術原因有關。我正在專門討論getter/setter注意更多get/set的場景。

+3

http://stackoverflow.com/questions/1568091/why-use-getters-and-setters – Klaasvaak

+0

好的問題再次。簡單但複雜的答案,特別是關注PHP。請繼續詢問。對於這裏我沒有時間回答,但我有強烈的感覺,這取決於對象的類型(值,助手,操作符,對象/不可變或不)。有了getter和setter往往可以防止你做出錯誤的決定,所以保留屬於某個對象的私有屬性(例如「屬性」)並不會太偏離軌道,並且使得你的代碼在某種程度上可以在PHP中得到證明。 – hakre

回答

1

如果你正在做什麼你的getter和setter方法,那麼,你可能也只是使公共財產。但制定者通常用來檢查值,以確保它是有效的:

public function setFoo($foo) { 
    if (!is_string($foo)) { 
     throw new InvalidArgumentException('No you foo-l!'); 
    } 
    $this->foo = $foo; 
} 

這是一個好主意,要做到這一點,以保證類的完整性,這就是封裝是。即使你現在沒有做這個檢查,你可能會在將來由於某些設置無效值而導致的第三個錯誤修復後再添加它。如果您突然開始切換到方法調用而不是屬性分配,那麼您將很難對所有設置屬性的代碼進行改進。

儘早開始真正的封裝。

0

這真的可以歸結到open/closed principle

軟件實體(類,模塊,函數等)應該對擴展開放,對修改關閉

在此背景下,該原則意味着一個班級的成員應該默認爲

看起來,在某些情況下,您可以聲明一個公共成員。你可以,但是你仍然不應該這樣做。部分原因是爲了避免不良習慣 - 將所有班級的成員暴露給每個人都很sl。。

這也是一個表明你的意圖的問題:如果有人看到公衆成員,他們認爲什麼?如果作者打算讓成員公開,或者他們真的不知道自己在做什麼,那麼目前還沒有辦法知道。

相關問題