任何人都可以解釋爲什麼這兩個產生相同的結果嗎?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