我正在阅读一些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会发生什么?即它为什么会消失?
提前致谢
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,b并c通过访问__get和键被echo"第一D,它们的值被返回,串连成字符串,并输出后的输出'B,C’.
那么,这说明的是,该__get方法被触发b,并c而不是a,则值"A","B"和"C"的输出,那么值"CC"设置,然后b和c通过访问__get再次,然后再次输出"A","B"和"C".