为什么"A"会消失?

Rup*_*ert 1 php oop

我正在阅读一些Zend PHP认证问题,并坚持这个问题:

以下是什么输出:

<?php

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;
Run Code Online (Sandbox Code Playgroud)

答案:b,c,A,B,C,c:CC,b,c,A,B,C

我知道在尝试访问/设置不可访问的属性时会调用__get()和__set但有人可以告诉我$ m-> a会发生什么?即它为什么会消失?

提前致谢

dec*_*eze 7

echo $m->a.",".$m->b.",".$m->c.",";
Run Code Online (Sandbox Code Playgroud)

请注意,字符串正在连接,但会__get输出密钥的名称.小写字母是键名,大写字母是值.

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

a访问通常,不通过__get,bc通过访问__getecho"第一D,它们的值被返回,串连成字符串,并输出的输出'B,C’.

那么,这说明的是,该__get方法被触发b,并c而不是a,则值"A","B"和"C"的输出,那么值"CC"设置,然后bc通过访问__get再次,然后再次输出"A","B"和"C".