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.",";
表示:
- 获取
$m->a
的值。是A
。正如调试器向您展示的那样。
- 获取
$m->b
的值。您没有 public 属性 b
,因此 __get
运行。它呼应 b,
(来自行 echo "$v,";
)和 returns B
- 获取
$m->c
的值。您没有 public 属性 c
,因此 __get
运行。它呼应 c,
(来自 echo "$v,";
行)和 returns C
.
- 将 返回的 值('A'、'B'、'C')与
,
. 连接起来
因此,在 echo
连接两个 echo
的结果之前已经完成:b,c,
。在那之后 A,B,C
字符串 echo
ed
所以,我(暂时)认为我误解了 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.",";
表示:
- 获取
$m->a
的值。是A
。正如调试器向您展示的那样。 - 获取
$m->b
的值。您没有 public 属性b
,因此__get
运行。它呼应b,
(来自行echo "$v,";
)和 returnsB
- 获取
$m->c
的值。您没有 public 属性c
,因此__get
运行。它呼应c,
(来自echo "$v,";
行)和 returnsC
. - 将 返回的 值('A'、'B'、'C')与
,
. 连接起来
因此,在 echo
连接两个 echo
的结果之前已经完成:b,c,
。在那之后 A,B,C
字符串 echo
ed