PHP自增(++)中的一些奇葩问题研究记录

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。

感谢原博文大神!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值