php 输出值与调试器值不匹配

php output value does not match debugger value

所以,我(暂时)认为我误解了 PHP 中的魔法 __get 和 __set。美好的。

但此示例的输出不仅出乎意料,而且与调试器所说 将要输出的内容也不匹配。

<?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;
?>

这个输出是:

b,c,A,B,C,X

现在,我设置 XAMPP 和 NetBeans 只是为了调试这个...当我在

上放置断点时
echo $m->a.",".$m->b.",".$m->c.",";

并将鼠标悬停在 $m->a 上,我明白了

(字符串)A

但这不是输出结果?获得输出的第一个字符是

b

这是怎么回事?调试器说 $m->a 的值为 A,但是当我们回显它时,它输出 b

好像是ZCE的问题)

echo $m->a.",".$m->b.",".$m->c.",";表示:

  1. 获取 $m->a 的值。是A。正如调试器向您展示的那样。
  2. 获取 $m->b 的值。您没有 public 属性 b,因此 __get 运行。它呼应 b,(来自行 echo "$v,";)和 returns B
  3. 获取 $m->c 的值。您没有 public 属性 c,因此 __get 运行。它呼应 c,(来自 echo "$v,"; 行)和 returns C.
  4. 返回的 值('A'、'B'、'C')与 ,.
  5. 连接起来

因此,在 echo 连接两个 echo 的结果之前已经完成:b,c,。在那之后 A,B,C 字符串 echoed