PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPの&&演算子とAND演算子の違いとは?優先順位による挙動の差を徹底解説

PHPには、算術演算、代入、比較など、さまざまな処理を行うための多彩な演算子が用意されています。本記事では、論理演算子「&&」と「AND」に焦点を当て、それぞれの優先順位がもたらす挙動の違いを中心に詳しく解説します。これらの論理演算子は結果として真(true)か偽(false)を返すため、「ブール演算子」と呼ばれることもあります。

「AND」演算子とは

「AND」演算子は、両方の条件がtrueである場合にのみtrueを返す演算子です。まずは基本的な動作を、以下の例で確認してみましょう。

サンプルコード1

<?php
$val1 = 20;
$val2 = 50;
if ($val1 == 20 and $val2 == 50)
echo "True";
else
echo "False";
?>

出力結果

True

解説

変数$val1には20、$val2には50が代入されているため、条件「$val1 == 20」はtrue、「$val2 == 50」もtrueと評価されます。AND演算では両方のオペランドがtrueであれば結果もtrueとなるため、全体の結果は「True」となります。

サンプルコード2

<?php
$a = 30;
$b = 50;
if ($a == 30 and $b == 10)
echo "True";
else
echo "False";
?>

出力結果

False

解説

変数$aには30、$bには50が代入されています。条件「$a == 30」はtrueですが、条件「$b == 10」はfalseと評価されます。AND演算では片方でもfalseであれば結果はfalseになるため、全体の結果は「False」となります。

「&&」演算子とは

「&&」演算子も「AND」演算子と同様に動作し、式の中の両方の条件(オペランド)がtrueの場合にのみtrueを返します。以下の例で実際の使い方を見てみましょう。

サンプルコード

<?php
$val1 = 25;
$val2 = 5;
if ($val1 == 25 && pow($val2, 2) == $val1)
echo "True";
else
echo "False";
?>

出力結果

True

解説

変数$val1には25、$val2には5が代入されています。条件「$val1 == 25」はtrueであり、「pow($val2, 2) == $val1」も、5の2乗が25で$val1と等しいためtrueと評価されます。AND演算では両方のオペランドがtrueの場合のみ結果がtrueとなるため、全体の評価結果は「True」になります。

注意: ここで仮に$val2に20を代入した場合、「pow($val2, 2) == $val1」はfalseと評価されるため、AND演算の結果もfalseになります。

「AND」と「&&」の決定的な違い:演算子の優先順位

式の中では、演算子の優先順位に従って処理が実行されます。「&&」演算子の優先順位は高く、「AND」演算子の優先順位は低い——これが両者の大きな違いです。以下の例で、この違いによる挙動の差を確認してみましょう。

サンプルコード

<?php
$a = 10;
$b = NULL;
$val = $a && $b;
echo ($val ? 'TRUE' : 'FALSE'), "\n";
$val = $a and $b;
echo ($val ? 'TRUE' : 'FALSE');
?>

出力結果

FALSE
TRUE

解説

同じオペランドを使用しているにもかかわらず、両者の結果は異なっています。最初の式はFALSE、2番目の式はTRUEと評価されます。

最初の式「$val = $a && $b;」がFALSEと評価されるのは、「&&」演算子の優先順位が代入演算子「=」よりも高いためです。まず「$a && $b」の論理演算が実行され、その結果が変数$valに代入されます。$bはNULLのため演算結果はFALSEとなり、$valにはFALSEが格納されます。

一方、2番目の式「$val = $a and $b;」がTRUEと評価されるのは、「and」演算子の優先順位が「=」よりも低いためです。この場合、まず代入が先に行われ、「=」の右側にある$aの値(10)が$valに格納されます。その後「and」演算は内部的に実行されるものの、その結果はどこにも代入されません。よって$valには10が入っており、結果としてTRUEと判定されます。

まとめ

「AND」演算子と「&&」演算子は、どちらも同じ論理積(AND)の操作を行いますが、演算子の優先順位が異なる点が最大の違いです。特に代入演算子「=」と組み合わせて使用する場合は結果が大きく変わるため、予期しないバグを防ぐという意味でも、実務では優先順位の高い「&&」を使用することが推奨されます。

  1. C#と.NET Frameworkの違いとは?両者の関係をわかりやすく解説

    C#と.NET Frameworkの基本的な違いC#はMicrosoftが開発したプログラミング言語であり、一方の.NET Frameworkは同じくMicrosoftが提供するソフトウェアフレームワークです。つまり、C#は「言語」、.NET Frameworkは「アプリケーションを動作させるための実行基盤」というように、両者はまったく異なる役割を持つ存在です。.NET Frameworkの中核:CLRとクラスライブラリ.NET Frameworkの中核には、共通言語ランタイム(CLR:Common Language Runtime)と呼ばれる仮想的な実行エンジンが組み込まれています。CLRは

  2. Pythonの「==」と「is」演算子の違いをわかりやすく解説

    「==」と「is」の基本的な違い Pythonには、オブジェクトを比較するための方法として「==」演算子と「is」演算子の2つがあります。一見すると似たような働きをするように見えますが、この2つはまったく異なる目的を持っています。 「==」(等価演算子)は、2つの変数の値が等しいかどうかを比較します。一方、「is」(同一性演算子)は、2つの変数が同じオブジェクト(同じメモリ上の場所)を参照しているかどうかを確認します。 サンプルコード 以下のコードは、「==」と「is」の動作の違いを示すシンプルな例です。ここでは空のリストを扱っています。list1とlist2はそれぞれ独立した別々の空のリスト