这是我的设置:
display_startup_errors = on
display_errors = On
error_reporting = E_ALL | E_STRICT
$b;
function func ($name) {
global $b;
$b = 10;
return $b;
}
$a =& func("myname");
++$a ;
echo '<br/>$a= '.$a.' $b= ' .$b."<br/>";
xdebug_debug_zval('a'); echo "<br/> ";
上面的代码输出如下通知:
严格标准:只有变量应该通过引用在 /path/to/file/file.php 中的“某些行号”行
$a= 11 $b= 10
a: (refcount=1, is_ref=0)=11
为什么上面的代码会显示通知?为什么会发生 COW(写入时复制)?
$b;
function &func ($name) {//change here: to return a reference.
global $b;
$b = 10;
return $b;
}
$a =& func("myname");
++$a ;
echo '<br/>$a= '.$a.' $b= ' .$b."<br/>";
xdebug_debug_zval('a'); echo "<br/> ";
上面的代码将输出:
$a= 11 $b= 11
a: (refcount=1, is_ref=1)=11
为什么这里没有严格的标准通知?这里的参考作品。
$b;
function &func ($name) {
global $b;
$b = 10;
return $b;
}
$a = func("myname"); //change here: removed &
++$a ;
echo '<br/>$a= '.$a.' $b= ' .$b."<br/>";
xdebug_debug_zval('a'); echo "<br/> ";
上面的代码将输出:
$a= 11 $b= 10
a: (refcount=1, is_ref=0)=11
为什么一头牛在这里发生?
有关 xdebug_debug_zval 的信息,请访问此处。