$a = 1;
$b=&$a;
echo (++$b)+(++$b);
输出结果你猜是什么?
可能有些人以为是5,比如我…
但是实际结果是6,why?
其实这是个写时复制导致的问题。
先看这段代码:
$a = 1;
$b=$a;
echo (++$b)+(++$b);
左侧++$b计算结束,$左值=$b;继续计算右边的++$b,在修改$b时,因为$b发生改变,与$左值不同,左值会复制一份,$左值=2,$b改变后,$b=3,所以$左值+$右值=5。
而上面的代码,左侧++$b计算结束,$左值=$b;与上面相同。继续计算右边的++$b,在修改$b时,因为$左值是引用,所以并未复制出新变量。$左值=$b,所以相加后是6
引用计数相关的资料可以在这里找到:http://www.php.net/manual/en/function.debug-zval-dump.php