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