TaoGOGO的技术博客,始于2007年,通过文字分享技术、记录生活

PHP变量写时复制导致的计算错误问题

2010-07-19

$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

类别: | 阅读:106435 | 评论:0 | 标签:php 写时复制

想收藏或者和大家分享这篇好文章→

“PHP变量写时复制导致的计算错误问题”共有0条留言

发表评论

姓名:

邮箱:

网址:

验证码:

公告

҉百度内部推荐,高级研发/PM(需2年以上工作经验)。
有意者微博私信联系~

微博言语

文章分类