有人可以解释为什么这两个产生相同的结果吗?
$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变量,它会产生预期的结果。
答案 0 :(得分:8)
运算符优先级和关联性仅确定表达式的方式 如果进行分组,则不会指定评估顺序。 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)