1
类魔法{
    公共 $a = "A";
    受保护的 $b = array("a" => "A", "b" => "B", "c" => "C");
    受保护的 $c = 数组(1,2,3);
    公共函数 __get($v) {
        回声“$v,”;
        返回 $this->b[$v];
    }
    公共函数 __set($var, $val) {
        echo "$var: $val,";
        $this->$var = $val;
    }
}

$m = 新魔法();
echo $m->a.", ".$m->b.", ".$m->c.",";
$m->c = "抄送";
echo $m->a.", ".$m->b.", ".$m->c.",";

这是 ZCE 的示例问题(不是来自实际考试)。有人可以向我解释......这里发生了什么,为什么答案是......完全不是我所期望的?

b, c, A, B, C,c: CC,b, c, A, B, C,
4

1 回答 1

3

那么……你期待什么?

它调用__get/__set如果您在实际范围内没有访问该属性的权限/该属性不存在。

所以$m->a直接得到“A”;$m->b$m->c先调用__get("b")and __get("c")(在回显“b,c,”后返回“B”和“C”)

对于$m->c = "CC";: 它调用__set("c", "CC")as$c是一个受保护的(不可访问的)属性也是如此。(在回显“c:CC”后将 $m->c 设置为“CC”)

于 2013-04-08T19:19:54.013 回答