2016-12-12 153 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

相關問題