如果您使用未定义的行为,这种情况总是会发生。而你所做的是未定义的行为。所以不要试图得到一个遵循确定性逻辑的解释,因为 undefined 与此相反。
PHP手册指出:
// mixing ++ and + produces undefined behavior
$a = 1;
echo ++$a + $a++; // may print 4 or 5
您在评论中扩展了您的问题:
echo $c=($b++) - (++$b);
该语句的结果也得到-2。您所说的未定义行为是什么意思?
$b = 0 and it shall:
$c=($b++) - (++$b); | $b is 0 - process first brackets
$c= 0 - (++$b); | $b is 1 - process second bracktes inner operator
$c= 0 - ($b); | $b is 2 - process second brackets
$c= 0 - 2; | calculate
$c= -2;
这显然是您执行代码时的结果。没有定义这将始终以这种方式计算,因此未定义。例如,如果首先处理第二个括号,您将得到不同的结果。