2009-08-01 45 views
1

只是一個想法:設置器/吸氣在一種方法

例子(PHP): 設置名稱: $對象 - >名稱( '名稱'); 獲取名稱: $ object-> name();

如果沒有參數:該方法用作getter,否則用作setter。對於簡單的getter/setter。愚蠢的,不管,也許?

編輯:跟進答案:我不是很喜歡得到並設置,因爲我更喜歡儘可能明確界面。當只有幾個屬性,它也是過大的恕我直言。所以我想用幾個明確的getter/setter將它縮小到類/對象。

+1

如果您更喜歡儘可能明確的接口,爲什麼你甚至考慮有一種方法根據傳遞給它的內容做兩件不同的事情? – 2009-08-01 13:23:47

+0

好問題。我希望這個想法在面對它的時候會很清楚。不像setX/getX那樣清晰,但足以爲一個不太混亂的界面換取一點清晰度。 – koen 2009-08-01 17:08:04

+0

我已經嘗試了許多不同的方法,並且使用與類屬性同名的函數是我的最愛。 `__get`和`__set`使調用代碼更好,但類代碼有點難看。 `$ obj-> property`和`$ obj-> property()`沒有多大區別。 – DisgruntledGoat 2009-08-24 12:49:28

回答

1

當然,你可以這樣做,如果它是有道理的應用程序,否則,我只想用這已經爲你設置標準的getter/setter方法。你的功能可能是這樣的:

public function name($val = null) 
{ 
    if (is_null($val)) 
    { 
    return $this->name; 
    } 
    else 
    { 
    $this->name = $val; 
    } 
} 
4

問題在於難以遵循。我寧願使用PHP5的__get和__set,因此獲取和設置變量更自然,每個人都會確切知道我在做什麼。 IE:

 
class myClass 
{ 

    function __get($name) 
    { 
     return $this->array[$name]; 
    } 
    function __set($name, $value) 
    { 
     $this->array[$name] = $value; 
    } 
    function print() 
    { 
     echo $this->array['test']; 
    } 
} 
$obj = new myClass; 
$obj->test = "Hi"; 
echo $obj->test; //echos Hi. 
$obj->print(); //echos Hi. 
2

它可以使用__call()魔術方法完成。

class Test { 
    public function __call($name, array $args) { 
     $variable =& $this->$name; 
     if(!empty($args)) { 
      $variable = $args[0]; 
     } 
     return $variable; 
    } 
}