php相同的结果添加不同数量的变量

时间:2016-12-12 19:30:42

标签: php

有人可以解释为什么这两个产生相同的结果吗?

$a = 1;
$c = $a + $a++;
var_dump($c);//int(3)

$a = 1;
$c = $a + $a + $a++;
var_dump($c);//int(3)

在PHP 7.1中测试。检查了两种情况的操作码转储,但仍然无法得到重点。如果我们向表达式添加更多$ a变量,它会产生预期的结果。

1 个答案:

答案 0 :(得分:8)

来自PHP: Operator Precedence

  

运算符优先级和关联性仅确定表达式的方式   如果进行分组,则不会指定评估顺序。 PHP没有   (在一般情况下)指定表达式的顺序   评估和假定特定评估顺序的代码应该   要避免,因为行为可以在PHP或版本之间发生变化   取决于周围的代码。

     

示例#2未定义的评估顺序

$a = 1;
echo $a + $a++; // may print either 2 or 3

$i = 1;
$array[$i] = $i++; // may set either index 1 or 2

因此,在您的第一个示例中,PHP显然会为1返回$a++,然后将其递增到2,然后添加新的$a,即2 }。

在第二个示例中,PHP返回1 $a,然后添加$a,然后添加$a,然后将其递增到2

从这里可以看出:https://3v4l.org/kvrTr

PHP 5.1.0 - 7.1.0

int(3)
int(3)

PHP 4.3.0 - 5.0.5

int(2)
int(3)