如果我尝试这样做:
$a = 0; echo $a + ++$a, PHP_EOL; echo $a;
我得到以下输出:
2 1
演示:http://codepad.org/ncVuJtJu
我希望将其作为输出:
1 1
$a = 0; // a === 0 echo $a + ++$a, PHP_EOL; // (0) + (0+1) === 1 echo $a; // a === 1
但是为什么不输出呢?
所有解释为什么得到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。
$l + ++$l
$l + (++$l)
操作员的关联性也不能确定评估顺序。该+运营商具有左结合仅确定$a+$b+$c为被评估($a+$b)+$c。它不能确定单个运算符的操作数的评估顺序。
$a+$b+$c
($a+$b)+$c
同样相关:在此错误报告中,关于另一个表达式的结果未定义,PHP开发人员说:“我们不保证求值顺序[…]就像C语言一样。您可以指向代码中的任何位置吗?说明第一个操作数首先被评估的文档?”