PHPの「and」と「&&」演算子の違い|優先順位による挙動の差を徹底解説
PHPには、論理ANDを表す「and」と「&&」の2つの演算子が存在します。一見すると同じ働きをするように見えますが、両者には演算子の優先順位という重要な違いがあります。
「and」演算子は代入演算子「=」よりも優先順位が低い一方、「&&」は「=」よりも高いという特性を持っています。そのため、本来同じ処理を行うはずの2つの演算子でも、コードの書き方によってはまったく異なる結果を生むことがあるのです。
演算子の優先順位の違い
PHPにおける関連する演算子の優先順位は、高い順に以下のようになっています。
- &&
- ||
- =(代入演算子)
- and
- xor
- or
ポイントは、「&&」は代入より先に評価される一方、「and」は代入より後に評価される点です。
例1:「and」演算子を使った場合
まずは「and」演算子を使用した基本的な例です。
<?php
$val1 = 55;
$val2 = 65;
if ($val1 == 55 and $val2 == 65)
echo "Result = True";
else
echo "Result = False";
?>
実行結果は以下の通りです。
Result = True
例2:「&&」演算子を使った場合
続いて、「&&」演算子を使用した例です。
<?php
$val1 = 110;
$val2 = 110;
if ($val1 == 110 && $val2 == 110)
echo "Result = True";
else
echo "Result = False";
?>
実行結果は以下の通りです。
Result = True
例3:両者の違いが顕著に現れるケース
if文のように条件式全体を評価する場合、どちらの演算子でも同じ結果になります。しかし、代入と組み合わせた場合には違いが明確に現れます。次の例を見てみましょう。
<?php
$bool = TRUE and FALSE;
echo ($bool ? 'true' : 'false'), "\n";
$bool = TRUE && FALSE;
echo ($bool ? 'true' : 'false');
?>
実行結果は以下の通りです。
true
false
なぜこのような結果になるのか?
最初の行「$bool = TRUE and FALSE;」は、「=」の方が「and」よりも優先順位が高いため、次のように解釈されます。
($bool = TRUE) and FALSE;
つまり、$boolにはまずTRUEが代入され、その後に行われる「and FALSE」の評価結果はどこにも格納されません。そのため、$boolの値はtrueのままになります。
一方、「$bool = TRUE && FALSE;」は「&&」の方が「=」よりも優先順位が高いため、次のように解釈されます。
$bool = (TRUE && FALSE);
この場合、論理演算の結果であるFALSEがそのまま$boolに代入されるため、出力はfalseとなります。
まとめ
このように、「and」と「&&」は優先順位の違いにより、代入と組み合わせた際に予期しない挙動を引き起こす可能性があります。バグを防ぐためにも、日常的なコーディングでは論理ANDに「&&」を使用するのが一般的であり、推奨されています。「and」や「or」は、意図的に低い優先順位を活かしたい特殊な場面に限定して使うとよいでしょう。
-
Pythonの「and」と「or」演算子の違いとは?論理演算子の基本をわかりやすく解説
Pythonにおける論理演算子の基本Pythonでは、「and」「or」(さらに「not」)は論理演算子として定義されています。これらの演算子は、いずれも2つのオペランド(被演算子)を受け取り、それぞれのオペランドは真(True)または偽(False)に評価されます。条件分岐や繰り返し処理の制御において頻繁に使われる重要な構成要素です。and演算子:両方がTrueのときだけTrueを返す「and」演算子は、両方のオペランドがTrueである場合にのみTrueを返します。片方でもFalseであれば、結果は必ずFalseになります。>>> a=50 >>> b=2
-
Pythonの「or」演算子と「|」演算子の違いとは?
はじめに:or と | はまったく別の演算子Pythonには一見似ているように見える2つの演算子がありますが、その役割はまったく異なります。orは論理演算子であり、|はビット単位の演算子(ビットワイズ演算子)です。or演算子は、任意の型の2つのオペランドを受け取り、それらを真偽値として評価します。そして、どちらか一方でもTrueと評価されればTrueを返します。両方ともFalseの場合のみFalseを返します。or 演算子の実行例>>> a=50 >>> b=25 >>> a>40 or b>40 True >>&g