一个关于PHP的问题?

  • 回答 (2)
  • 关注 (0)
  • 查看 (121)

代码如下:

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

运行结果是12和5

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

当巨浪把当巨浪把提问于
帅的惊动我国计算机大神回答于

我也觉得是 7- -5=12。

$a = 7;

$a-- + $a; //输出13,7+6

运算符后面 $a--的副作用已经产生了。

当巨浪把it修改于

自问自答下把:我查到的资料如下:

$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。

其中,需要特别理解的是,后置递减副作用的生效节点。

扫码关注云+社区

领取腾讯云代金券