所以,我可以(现在)认为我在PHP中误解了魔法__get和__set。精细。
但是这个例子的输出不仅意外,它也不匹配调试器所说的将要输出的内容。
build/install/myapp/bin
这个输出是:
b,c,A,B,C,X
现在,我设置XAMPP和NetBeans只是为了调试这个...当我在
上放置一个断点时<?php
// put your code here
class Magic {
public $a = 'A';
public $x = 'X';
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.",";
echo $m->x;
?>
并将鼠标悬停在$ m-&gt; a上,我看到了
(字符串)A
但那不是输出的东西吗?获得输出的第一个字符是
B'/ P>
发生了什么事?调试器说$ m-&gt; a的值为A,但是当我们回显它时,它会输出b
答案 0 :(得分:1)
似乎像ZCE问题)
行echo $m->a.",".$m->b.",".$m->c.",";
表示:
$m->a
的价值。它是A
。正如调试器向您展示的那样。$m->b
的价值。您没有公开属性b
,因此__get
会运行。它回显b,
(来自行echo "$v,";
)并返回B
$m->c
的价值。您没有公开属性c
,因此__get
会运行。它回显c,
(来自行echo "$v,";
)并返回C
。,
连接返回值('A','B','C')。因此,在echo
连接已经完成的两个echo
的结果之前:b,c,
。在A,B,C
字符串echo
ed