2012-02-24 109 views
0

在那裏在我班上的getter和setter使用我不應該在getter和setter中使用變量變量嗎?

$this->{$name} 

代替

$this->some_array[$name] 

任何潛在的缺陷?

爲了澄清,我的意思是內__get和__set方法,而不是在調用它們。

例如:

function __get($name) { 
    ... 
    return $this->{$name}; 
} 
+0

你能解釋一下這兩個代碼片段是如何關聯?一個似乎是一個標量屬性,而另一個是數組屬性項 – Phil 2012-02-24 02:14:24

回答

2

一個的getter/setter纔會被調用。當動態設置類中未定義的屬性時,該屬性將以public可見性創建。這意味着它可以從任何地方訪問,並且訪問它時不會調用getters/setter。

爲了說明,下面的輸出「設置欄中的」只有一次:

class Foo { 

    public function __set($name, $val) { 
     echo "setting $name\n"; 
     $this->$name = $val; 
    } 

} 

$foo = new Foo; 
$foo->bar = 'baz'; 
$foo->bar = 42; 

這可能不是你想要的東西。此外,它允許任何人改變你的對象的任何屬性,這可能也不是你想要的。

0

你會開始注意到一個區別,如果你想投你的對象數組,ALA(數組)$對象

無論方式是「最佳」練習,根據需要做出決定,如果沒有關係,請投擲硬幣。如果屬性是直接無法訪問

0

我覺得我有什麼你問的要點。

使用數組可以更容易地抓住已設置通過訪問一個變量,而不是一堆到處散佈類變量,你不能輕易獲取的所有變量。我使用數組作爲很多,因爲我經常使用魔法的方法來訪問相關的對象更容易($obj->property而不是$obj->array['property'])變量。

使用$this->{$name}除非你正在運行的__get和__set方法內檢查是有點多餘。例如,不要做這樣的事情:

function __set($property, $value) { 
    $this->{$property} = $value; 
} 

這本質上就是通過使用$obj->property = 'some value';已經達到...

相關問題