5

次のステートメントの結果は9を与えるはずです:(javaまたはjsまたはc++を使用して)

i = 1;
i += ++i + i++ + ++i;
//i = 9 now

しかし、PHPでは

同じステートメントは12を与えますか?!

$i = 1;
$i +=  ++$i + $i++ + ++$i;
echo $i;

これはバグですか、それとも誰かが理由を説明できますか?

4

5 に答える 5

7

答えは「PHPだから」です。そして、PHPはそのタイプのステートメントについて保証しません(ちなみに、Cもそうしません)。

はい、それは間違っていると見なされる可能性がありますが、それはPHPです。この「バグではない」バグレポートを参照してください。

于 2012-07-11T12:48:38.710 に答える
7

同様の例については、こちらをご覧ください。

基本的にこれは何が起こるかです:

最初++$iに評価されます。$i現在は2です。
$i += 2 + $i++ + ++$i;

次に、$i++評価されます。$i現在は3です。
$i += 2 + 2 + ++$i;

次に、++$i評価されます。$i現在は4です。
$i += 2 + 2 + 4;

最後に、合計が計算されます。
$i = 4 + 2 + 2 + 4 = 12

于 2012-07-11T12:53:16.007 に答える
4

演算子の優先順位に関するドキュメントによると:

// mixing ++ and + produces undefined behavior
$a = 1;
echo ++$a + $a++; // may print 4 or 5

だから私は何が起こっているのか推測しています:

$i +=  ++$i + $i++ + ++$i;

に翻訳されます

$i = (++$i + $i++ + ++$i) + $i;

その場合、合計で12になります。

于 2012-07-11T12:54:36.370 に答える
2

これらの増分の順序については保証されません。なぜあいまいなコードを書くのですか?

于 2012-07-11T12:50:22.057 に答える
1

Java、JS、またはC ++は、この方程式をそのように評価します。

i = 1;

i += ++i + i++ + ++i; --> i = i* + ++i + i++ + ++i (i* is 1 all the time)

しかし、PHPでは:

$i = 1;

$i += ++$i + $i++ + ++$i; --> $i = $i* + ++$i + $i++ + ++$i ($i* is calculated after increments, in your situation $i* is 4)

違いは私が思うことです。

于 2012-07-11T13:15:22.067 に答える