所有解释为什么得到2而不是1的答案实际上都是错误的。根据PHP文档,混合
+并
++以这种方式是不确定的行为,所以你可以得到1或2切换到不同版本的PHP可能会改变你得到的结果,这将是一样有效。
请参阅示例1,其中显示:
// mixing ++ and + produces undefined behavior$a = 1;echo ++$a + $a++; // may print 4 or 5
笔记:
运算符优先级 不能 确定评估顺序。运算符优先级仅确定将表达式
$l + ++$l
解析为$l + (++$l)
,而不确定+
运算符的左操作数还是右运算数首先被求值。如果首先评估左操作数,则结果将为0 + 1,如果首先评估右操作数,则结果将为1 + 1。操作员的关联性也不能确定评估顺序。该
+
运营商具有左结合仅确定$a+$b+$c
为被评估($a+$b)+$c
。它不能确定单个运算符的操作数的评估顺序。
同样相关:在此错误报告中,关于另一个表达式的结果未定义,PHP开发人员说:“我们不保证求值顺序[…]就像C语言一样。您可以指向代码中的任何位置吗?说明第一个操作数首先被评估的文档?”



