在那裏在我班上的getter和setter使用我不應該在getter和setter中使用變量變量嗎?
$this->{$name}
代替
$this->some_array[$name]
任何潛在的缺陷?
爲了澄清,我的意思是內__get和__set方法,而不是在調用它們。
例如:
function __get($name) {
...
return $this->{$name};
}
在那裏在我班上的getter和setter使用我不應該在getter和setter中使用變量變量嗎?
$this->{$name}
代替
$this->some_array[$name]
任何潛在的缺陷?
爲了澄清,我的意思是內__get和__set方法,而不是在調用它們。
例如:
function __get($name) {
...
return $this->{$name};
}
一個的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;
這可能不是你想要的東西。此外,它允許任何人改變你的對象的任何屬性,這可能也不是你想要的。
你會開始注意到一個區別,如果你想投你的對象數組,ALA(數組)$對象
無論方式是「最佳」練習,根據需要做出決定,如果沒有關係,請投擲硬幣。如果屬性是直接無法訪問
我覺得我有什麼你問的要點。
使用數組可以更容易地抓住已設置通過訪問一個變量,而不是一堆到處散佈類變量,你不能輕易獲取的所有變量。我使用數組作爲很多,因爲我經常使用魔法的方法來訪問相關的對象更容易($obj->property
而不是$obj->array['property']
)變量。
使用$this->{$name}
除非你正在運行的__get和__set方法內檢查是有點多餘。例如,不要做這樣的事情:
function __set($property, $value) {
$this->{$property} = $value;
}
這本質上就是通過使用$obj->property = 'some value';
已經達到...
你能解釋一下這兩個代碼片段是如何關聯?一個似乎是一個標量屬性,而另一個是數組屬性項 – Phil 2012-02-24 02:14:24