猿问

一个php简单又复杂的问题

代码如下:

<?php
$a = 7;
echo $a-- - - --$a;
echo $a;

运行结果是125

求解计算机是如何计算出12的结果呢?

MMMHUHU
浏览 431回答 3
3回答

侃侃尔雅

感谢 @小草 的指出,很抱歉对楼主有一定的误导。之前我对后置运算符的副作用生效时间理解有问题,查询文档之后,确认了。 $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。其中,需要特别理解的是,后置递减副作用的生效节点。

汪汪一只猫

7 - -5 = 12

HUX布斯

有意思了,我也觉得是 7- -5=12。 $a = 7; $a-- + $a; //输出13,7+6 运算符后面 $a--的副作用已经产生了。
随时随地看视频慕课网APP
我要回答