代码如下:
<?php
$a = 7;
echo $a-- - - --$a;
echo $a;
运行结果是12和5
求解计算机是如何计算出12的结果呢?
3 回答
![?](http://img1.sycdn.imooc.com/54584f240001db0a02200220-100-100.jpg)
侃侃尔雅
TA贡献1801条经验 获得超16个赞
感谢 @小草 的指出,很抱歉对楼主有一定的误导。
之前我对后置运算符的副作用生效时间理解有问题,查询文档之后,确认了。
$a-- 返回 $a,然后将 $a 的值减一。
$a--
返回的是 $a
减一 之前的值。
修改之后的回答如下:
优先级规则如下:
递增运算符规则如下:
解释如下:
根据优先级规则,题中代码等价于
<?php
$a = 7;
echo ($a--) - (- (--$a));
echo $a;
其中,第一个 echo
中,根据 --
运算符优先级
$a--
先执行,但是其副作用在此 第一个括号之后生效,所以此时参与运算的是7
,但是$a
的值已经变成了6
--$a
在$a--
后执行,但是其副作用先生效,此时$a
的值变成了5
,并参与后边运算
所以,第一个 echo
等价于:echo 7 - (-5)
,结果为 12
;
第二个 echo
为 $a
经过两次递减之后的值:5
下边从 opcode
角度来看这段代码,如下图所示:
我们可以看到,POST_DEC
生成,PRE_DEC
后生成,然后是两个 SUB
。
其中,需要特别理解的是,后置递减副作用的生效节点。
- 3 回答
- 0 关注
- 429 浏览
添加回答
举报
0/150
提交
取消