我知道我是很晚纔到這裏聚會,但我張貼此爲edificationof任誰也碰到這個問題絆倒。首先,我認爲測試類是錯誤的,如果這真的是第三方組件的功能,那麼我會挑選它,因爲它是垃圾。你真的想要所有的屬性名稱內部映射到單個屬性的'名稱',從而相互覆蓋?你真的希望所有的屬性名稱都作爲屬性值返回嗎?該代碼應該是這樣的:
class test {
public function __get($name){
return $this->$name;
}
public function __set($name,$value){
$this->$name = $value;
}
}
其次,你可以改變類的,即使它有保持不變。這是繼承的關鍵。這是open-closed principle。如果函數是不正確的,只是延長測試這樣的改正:
class test {
private $name;
public function __get($name){
return $name;
}
public function __set($name,$value){
$this->name = $value;
}
}
class my_test extends test
{
public function __get($name)
{
return $this->$name;
}
public function __set($name,$value){
$this->$name = $value;
}
}
你不應該需要定義__isset()
爲更正後的代碼會做這是什麼意思的事,但如果你這樣做,你可以做這也是。
現在,下面將做什麼是應該做的(注意類名稱的變化):)`
$obj = new my_test();
$obj->a = 2;
if (!empty($obj->a)) {
echo 'not empty';
}
爲什麼不定義'__isset(? – 2010-09-17 12:32:25
我做了一個更新,不能改班。 – danidacar 2010-09-17 13:39:11