任何人都可以解释为什么这两个产生相同的结果吗?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变量,它会产生预期的结果。
任何人都可以解释为什么这两个产生相同的结果吗?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变量,它会产生预期的结果。
运算符优先级和结合性只有确定如何 分组表达式,它们没有规定评估的顺序。 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)
这是一个错误还是功能?它确实发生在JavaScript中'var a = 1; var c = a + a ++; console.log(c); var a = 1; var c = a + a + a ++; console.log(c);' – jycr753
我((int)((0.1 + 0.7)* 10)); // int(7)'([float precision problem](http://titanic.fauser.edu/php) /郎uage.types.float.php.htm#warn.float-precision))。但我真的不知道。 –
参见https://3v4l.org/3bWI0 – bishop
这在这里解释:https://gist.github.com/nikic/6699370有可能还有一个或十个重复在SO上。 – NikiC