PHP自增(++)中的一些奇葩问题研究记录
最近,从一篇博文中看到php中一个比较奇葩的问题,于是就在自己的博客中做一下记录,原文的网址如下:[PHP一个诡异的加法算法的研究](http://www.phpchina.com/portal.php?mod=view&aid=40040)
首先呢,我们先来看一个简单的PHP问题:
<?php
$a = 1;
echo (++$a)+(++$a);
?>
很简单,输出5。
然后,加一点变化,如下,那么输出什么呢?
<?php
$a = 1;
$b = &$a;
echo (++$a)+(++$a);
?>
很多童鞋不假思索的回答5,嗯,我开始也是这么想的,但是答案却是6,为什么呢【哭】?
要理解的话可以简单说明一下:
(1)问题1中:
(++$a)+(++$a) 可以理解为:$a1 = (++$a); $a2 = (++$a); echo $a1 + $a2;
这当然就属于5了,这也符合没学过c语言的人的思维。
(2)问题2:
$b = &$a; 这一句可改变了上面的规律了,其逻辑就变成了C语言思维了,如下:
++$a;++$a; echo $a + $a;
那结果就是6了。
好了,奇怪对了问题还算解析清楚了,但是奇葩的问题接踵而来,看新代码:
<?php
$a = 1;
$b = &$a;
echo (++$a)+(++$a)+(++$a);
?>
根据以上经验,很简单嘛,第一想法就说结果是12,可是呢,run了一下后,电脑却告诉我是10;
天啊,这又是闹哪一出,用phpdbg一下后,结果发现运行逻辑是这样的:
$a=++$a;
$a=++$a;
$c = $a + $a;
echo $a + $a +$c ; //10
好的解析完了,看完是不是觉得很奇葩,原博文作者就确认了这是一个bug并报告给了php官方,并且亲自验证后确认在php7已经修复了这个bug。
感谢原博文大神!