为什么前/后增量运算符的行为错误?

时间:2015-01-13 23:27:21

标签: php

为什么PHP中的变量值在以下代码中没有一致的行为?

<?php
$piece = 10;
// output is 10 10 10 10 11 12 
echo $piece . $piece . $piece . $piece++ . $piece . ++$piece;

$piece = 10; 
// output is 10 10 10 11 12 
echo $piece . $piece . $piece++ . $piece . ++$piece;

$piece = 10; 
// output is 11 10 11 12 
echo $piece . $piece++ . $piece . ++$piece;
?>

问题是为什么最后一个例子中的第一个输出等于11?而不是10,因为它在上面两个例子中给出。

1 个答案:

答案 0 :(得分:6)

来自http://php.net/manual/en/language.operators.precedence.php

  

运算符优先级和关联性仅确定表达式的分组方式,它们不指定评估顺序。 PHP(在一般情况下)不指定表达式的评估顺序,应避免使用假定特定评估顺序的代码,因为行为可以在PHP版本之间或根据周围代码进行更改。

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

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

换句话说,你不能依赖++在特定时间对表达的其余部分生效。