7

少し前に PHP の学習を開始しましたが、次の問題に遭遇しました。

<?php

$a = 1;
$b = 2;

echo "$a * $b  = " . $a * $b;
echo "<br />";

echo "$a / $b  = " . $a / $b;
echo "<br />";

echo "$a + $b  = " . $a + $b;
echo "<br />";

echo "$a - $b  = " . $a - $b;
echo "<br />";

次の出力が得られます。

1 * 2 = 2
1 / 2 = 0.5
3
-1

出力の最後の 2 行は、私が期待するものではありません。

どうしてこれなの?これらの式はどのように評価されますか? 私はその言語をよりよく理解できるように努めています。

4

3 に答える 3

9

これは、連結演算子の優先順位が加算または減算演算子よりも高いが、乗算と除算の優先順位が連​​結よりも高いために発生します。

したがって、実際に実行しているのは次のとおりです。

echo ("$a + $b  = " . $a) + $b;
echo ("$a - $b  = " . $a) - $b;

最初のケースでは、それはこれに変わります:

"1 + 2 = 1" + $b

どのPHPが(型ジャグリング"1 + 2 = 1"のために)数値に変換しようとして1を取得し、式を次のように変換します。

1 + 2

そのため、3が得られます。同じロジックを減算条件に適用できます。

代わりに、計算を括弧で囲むと、目的の出力が得られます。

echo "$a + $b  = " . ($a + $b);
echo "$a - $b  = " . ($a - $b);
于 2012-08-16T18:33:44.917 に答える
1

連結は加算と減算よりも優先されますが、乗算や除算は優先されません。それで

echo "$a + $b  = " . $a + $b;

と同等です

echo ("$a + $b  = " . $a) + $b;

また、PHPは最初の部分を無視します。これは、最初の部分を数値に変換するのが難しいため、。だけが残るためです+ $b

かっこを使用する場合は、問題ないはずです。

于 2012-08-16T18:33:51.160 に答える
0

さて、あなたは本当に奇妙な振る舞いを見つけましたが、:)

算術演算子では、除算と乗算が最も優先順位が高いため、連結の前に評価されます。

追加と抽出は優先度が低いため、最初に左側の部分が評価され、次に右側の部分に追加/抽出されます。しかし、PHP は文字列から数値を抽出しようとしますが、最初の文字だけがそうであるため、それを使用します。

于 2012-08-16T18:36:41.920 に答える