$a=1;
echo $a+$a++; //3
與
$a = 1;
echo $a + $a + $a++; //3
輸出都是3,為什麼不先算$a++,玩了之後再和前面的$a相加,這樣的話不是就是5了麼
因為$a++是後置自增運算,是先求值再自增的。 ++$a是先自增再求值的。 這個在c/c++/java/c#。。。中都是一個套路。
[UPDATE]
以上說法極不嚴謹基本是錯誤的。
雖然$a++為後置自增運算,即先求值再加1, 但依然不能阻止編譯器先+1再求值,只要其+1的結果不影響求值結果。
比如:$b = $a++; 可以拆解成 $c = $a; $a++; $b = $c; 當然這只是可能
對於 $a + $a++; 按上邊的路子會變成 $c = $a; $a++; return $a + $c; 結果可想而知了。
但這些都是基於猜測,一切由編譯器根據實際情況且不違背語言規范地決定。
具體原理請google "順序點"