代码如下:
<?php
$a = 7;
echo $a-- - - --$a;
echo $a;
运行结果是12和5
求解计算机是如何计算出12的结果呢?
3 回答
侃侃尔雅
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 关注
- 519 浏览
添加回答
举报
0/150
提交
取消
