2011-01-22 112 views

回答

7

Getters setter通常用於從外部類從內部直接訪問字段。 主要優點/目的是吸制定者封裝

如果您的getter setter方法具有一定的邏輯代碼,然後使用它。

例如:

public void setValue(int val){ 
    if(val > 100) 
    this.val = 0; 
    else 
    this.val = val; 
    } 

另見

+0

鏈接到其他文章解釋了這個非常好。 – Knubo 2011-01-22 10:49:11

+0

int類型提示在PHP中不起作用。 – GolezTrol 2011-01-22 10:52:20

+0

@Geolez我不會看OP的PHP標籤,它的OOP概念在這裏描述的不是特定於任何語言的 – 2011-01-22 10:53:10

5

是,getter和setter方法是有用的。由於PHP不支持int或string等簡單類型的類型提示,因此不能強制將值設置爲正確的類型。

通過使用setter,您始終可以檢查設置的值。當設置爲int屬性的值不是int時,可以選擇對其進行類型轉換,或者引發錯誤,而不是僅僅接受錯誤的值。

這將使調試和維護應用程序變得更容易。因此,使用getter和setter是一個好主意,即使它們不包含除這些檢查以外的其他邏輯。

+0

+ 1.這很有用,謝謝你,org.life是對的。我內含地沒有添加語言特定的標記 – 2011-01-23 22:55:29

0

你應該幾乎在任何地方都使用getter和setter,包括在課堂上。如果你不這樣做,那麼你有可能破壞封裝,甚至更糟的是,你可能會使你的不變量失效。

如在C++的簡單示例:

class BankAccount 
{ 
public: 
    void withdraw(int amount) 
    { 
     m_balance -= amount; 
     m_withdrawals++; 
    } 

    void transfer(BankAcount& other, int amount) 
    { 
     m_balance -= amount; 
     other.m_balance += amount; 
    } 

private: 
    int m_balance; 
    int m_withdrawals; 
}; 

見錯誤? transfer提款,但不會增加m_withdrawals。如果僅僅調用withdraw而不是手動減少餘額,則可以避免這種情況。

這同樣適用於吸氣和吸氣。例如,讓getters懶惰地初始化它們的值是很常見的。如果另一個成員函數試圖直接訪問未初始化的成員,那麼你將得到一個空指針解引用。

基本上,您應該總是嘗試使用getters和setter,只要他們提供了他們想要的功能。你做的事情越低級,你所擁有的低級別的錯誤就越多。如果你不打算使用它們,寫入getter和setter是沒有意義的。

1

@GolezTrol

沒有關於主題的PHP徽章,您錯了。你所描述的與setters無關。你可以通過使用任何方法而不僅僅是一個setter來強制輸入參數(在PHP中)。

你可以寫:

setX(X $x){ ...} 
setY(Y $y){ ...} 

或者只是:

iAmMethodNotASetter(X $x, Y $y){ 

    //20lines of code here end then: 

    $this->x = $x; 
    $this->y = $y; 
    } 

就像你看到的,我並不需要制定者的物體屬性來強制類型。

無論如何,在檢查變量類型後拋出setter錯誤是個壞主意。程序員從靜態語言轉換到動態類型語言是常見的錯誤。

安裝者和geters是CONVENTION,他們不執行任何操作! 今天我們通常使用它們來創建Plain Old Java Objects。 (POJO - 在php中是POPO)所以它只是一個創建對象的對話(標準),可以在圖書館或項目之間使用。

你可以結合setters與類型檢查或任何,但它不會讓他們比他們更多的東西。

關於封裝:

@ org.life.java - Jigar喬希

「的主要優點/目的是吸制定者 封裝,」

@Peter亞歷山大

「你應該使用吸氣劑 和二傳幾乎無處不在, 包括裏面的「這個類。如果您 不這樣做,那麼你可能 打破封裝」,‘getter和setter方法 是封裝’

錯,錯,錯封裝無關與getter和setter,它是非常常見的錯誤,我知道有很多文章反覆遍歷所有顛倒...
吸氣劑和封堵器不會幫助封裝甚至更糟糕,他們可能會破壞封裝,他們這樣做,當你使用它們來獲得一些來自對象的數據,而不是要求對象用自己的數據爲你做點什麼

封裝==對象對其數據承擔全部責任並且不給它的行數據。對私人財產而言,吸氣劑不僅僅是以複雜的方式公開這種財產==剎車封裝。

Chceck段封裝:http://en.wikipedia.org/wiki/C%2B%2Bhttp://en.wikipedia.org/wiki/Encapsulation_%28computer_science%29 甚至沒有一個字關於制定者或干將......