2016-12-12 97 views
7

任何人都可以解释为什么这两个产生相同的结果吗?php相同的结果添加不同数量的变量

$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

我((int)((0.1 + 0.7)* 10)); // int(7)'([float precision problem](http://titanic.fauser.edu/php) /郎uage.types.float.php.htm#warn.float-precision))。但我真的不知道。 –

+0

参见https://3v4l.org/3bWI0 – bishop

+1

这在这里解释:https://gist.github.com/nikic/6699370有可能还有一个或十个重复在SO上。 – NikiC

回答

8

PHP: Operator Precedence

运算符优先级和结合性只有确定如何 分组表达式,它们没有规定评估的顺序。 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是$a再加入$a然后加入$a,然后递增到2返回1

由于可以在这里看到: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) 
+0

这是一个错误还是功能?它确实发生在JavaScript中'var a = 1; var c = a + a ++; console.log(c); var a = 1; var c = a + a + a ++; console.log(c);' – jycr753

相关问题