2015-01-13 6 views
6

PHPの変数の値が次のコードで一貫した動作をしないのはなぜですか?プリ/ポストインクリメント演算子が正しく動作しないのはなぜですか?

<?php 
$piece = 10; 
// output is 10 10 10 10 11 12 
echo $piece . $piece . $piece . $piece++ . $piece . ++$piece; 

$piece = 10; 
// output is 10 10 10 11 12 
echo $piece . $piece . $piece++ . $piece . ++$piece; 

$piece = 10; 
// output is 11 10 11 12 
echo $piece . $piece++ . $piece . ++$piece; 
?> 

最後の例の最初の出力が11になるのはなぜですか?上記の2つの例のように10の代わりに。

+0

増分/減算演算子:http://php.net/manual/en/language.operators.increment.php – solar411

+0

@ solar411少し具体的なものを参照できますか? –

+0

これはコードパッドです:http://codepad.org/gEoWxshO。非常に奇妙な振る舞い - 2番目のブロックのプリインクリメントが3番目のブロックの最初の '$ piece'で再び実行されるようなものです。あるいは、第3ブロックのポストインクリメントが原因かもしれません。この場合、例間の不一致は説明されません。 – halfer

答えて

6

http://php.net/manual/en/language.operators.precedence.phpから:

演算子の優先順位と結合のみの表現をグループ化する方法を決定し、彼らは評価の順序を指定しないでください。 PHPは、(通常は)式の評価順序を指定せず、PHPのバージョン間や周囲のコードに応じて動作が変わる可能性があるため、特定の評価順序を避けるべきです。言い換えれば

<?php 
$a = 1; 
echo $a + $a++; // may print either 2 or 3 

$i = 1; 
$array[$i] = $i++; // may set either index 1 or 2 
?> 

、あなたは、式の残りの部分に関して、特定の時間に++撮影効果に依存することはできません。

+0

Downvoter:コメントしますか? –

+0

私の答えにスポットのように見えます... –

+0

それについて知りませんでした...非常に奇妙です+ 1 – JorgeeFG

関連する問題