1
class Magic { public $a = "A"; protected $b = array("a" => "A", "b" => "B", "c" => "C"); protected $c = array(1,2,3); public function __get($v) { echo "$v, "; return $this->b[$v]; } public function __set($var, $val) { echo "$var: $val,"; $this->$var = $val; } } $m = new Magic(); echo $m->a.", ".$m->b.", ".$m->c.","; $m->c = "CC"; echo $m->a.", ".$m->b.", ".$m->c.",";
這是ZCE的示例問題(不是來自實際考試)。有人可以請我解釋一下......這裏發生了什麼,爲什麼答案是......根本不是我所期望的?不可思議的方法__get和__set - 來自ZCE的示例
b, c, A, B, C,c: CC,b, c, A, B, C,
爲什麼小寫字母都是大寫之前的大寫? – Ziarno 2013-04-09 12:44:49
,因爲字符串是首先連接的,需要讀取(__set中的echo立即在讀取時調用;不等待字符串連接完成),並且只有在讀取值之後纔會輸出字符串。 (嘗試用「,」替換echo語句中的「。」,然後解釋它是否有不同的回聲語句。) – bwoebi 2013-04-09 12:46:52