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

时间:2017-03-09 20:19:50

标签: php getter-setter

所以,我可以(现在)认为我在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

1 个答案:

答案 0 :(得分:1)

似乎像ZCE问题)

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

  1. 获取$m->a的价值。它是A。正如调试器向您展示的那样。
  2. 获取$m->b的价值。您没有公开属性b,因此__get会运行。它回显b,(来自行echo "$v,";)并返回B
  3. 获取$m->c的价值。您没有公开属性c,因此__get会运行。它回显c,(来自行echo "$v,";)并返回C
  4. 使用,连接返回值('A','B','C')。
  5. 因此,在echo连接已经完成的两个echo的结果之前:b,c,。在A,B,C字符串echo ed

    之后