【PHP】論理演算子について解説 – 複数の条件式、論理式は論理演算子でまとめよう

if文の条件式などで使用される論理式は比較演算子を用いた場合、1つのデータに対してのみ、論理値(true/false)を評価します。

しかし、if文の条件式では複数のデータに対して比較演算子を用いて評価を行い、全てが真の場合のみ実行したい場合が頻繁にあります。

ここではそのような場面で使える論理演算子について解説します。

★ 目的

  • 論理演算子で複数の論理式を1つにまとめれるようになる。

論理演算子とは

論理演算子とは複数の論理値を組み合わせて、1つの論理値として算出する演算子です。

例えば、2つの論理式、AとBがある場合、『Aが真(true)かつBも真(true)なら真(true)とする』や『Aが真(true)またはBが真(true)なら真(true)とする』のような組み合わせを作ることができます。

論理演算子の種類

代表的な論理演算子は3つあり、論理積(AND、かつ)の&&、論理和(OR、または)の||、否定(NOT)の!があります。

論理演算子意味記述例
&&左右オペランドが共に真(true)の場合は真(true)とする0 < $x && $x < 10
||左右オペランドのいずれかでも真(true)の場合は真(true)とする$x < 0 || 10 < $x
!オペランドが真の時は偽、偽の時は真とする! ( $x < 10 )

論理演算子の構文

各論理演算子の構文は次のようになります。

論理積 &&

左オペランド && 右オペランド

論理積では両オペランドがtrueの場合のみ、trueとなります。

論理和 ||

左オペランド || 右オペランド

論理和では両オペランドのいずれか1つでもtrueの場合、trueとなります。

否定

! ( オペランド )

否定ではオペランドの論理値がtrueの場合はfalse、falseの場合はtrueと論理値が反転した結果になります。

論理演算子の具体例

複数の論理式を組み合わせた結果を見ながら確認してきましょう。

なお、出力にはvar_dump関数を使用し、論理式の評価が偽(false)の場合でも、結果が見えるようにしています。(echoで偽(false)を出力すると何も出力されず分かりにくいため)

論理積の例

ソースコード

<?php

// $xに数値3を代入
$x = 3;
// $xが0より大きく、10より小さい場合は真(true)
$result = 0 < $x && $x < 10;
// 結果を出力
var_dump( $result );

?>

実行結果

bool(true)

論理演算子を使用した部分は6行目の『0 < $x && $x < 10』になります。

処理の順序はまず論理演算子の左右オペランドの論理式を評価します。

ここでは『0 < $x』と『$x < 10』を評価し、いずれも真(true)になります。

そして、論理積(&&)は左右オペランドが共に真(true)の時に真(true)になるため、『0 < $x && $x < 10』は真(true)となります。

そして、その結果が$resultに代入されるため、trueと表示されます。

なお、左右のオペランドのいずれかが、偽(false)になるように$xの数値(99など)を変更すると、出力結果は偽(false)になるので試してみてください。

論理和の例

ソースコード

<?php

// $xに数値3を代入
$x = 99;
// $xが0より大きく、10より小さい場合は真(true)
$result = $x < 0 || 10 < $x;
// 結果を出力
var_dump( $result );

?>

実行結果

bool(true)

論理演算子を使用した部分は6行目の『$x < 0 || 10 < $x』になります。

処理の順序は論理積と同様に初めに論理演算子の左右オペランドの論理式を評価します。

ここでは『$x < 0』は偽(false)、『10 < $x』は真(true)となります。

そして、論理和(||)は左右オペランドのいずれかでも真(true)の場合は真(true)となるため、『$x < 0 || 10 < $x』は真(true)となります。

そして、その結果が$resultに代入されるため、trueと表示されます。

なお、左右のオペランドのいずれも、偽(false)になるように$xの数値(3など)を変更すると、出力結果は偽(false)になるので試してみてください。

否定の例

ソースコード

<?php

// $xに数値3を代入
$x = 3;
// $xが0より大きく、10より小さい場合は真(true)
$result = !( 10 < $x );
// 結果を出力
var_dump( $result );

?>

実行結果

bool(true)

論理演算子を使用した部分は6行目の『!( 10 < $x )』になります。

※ 否定演算子は!(びっくりマーク)ですが、どの範囲にかかっているかを明確にするため、括弧で論理式を囲んでいます。

処理の順序は括弧内の論理式を評価し、その結果を反転させた値が最終的な結果となります。

ここでは『10 < $x』は偽(false)となるため、その結果を反転させた真(true)が最終的な結果となります。

『10 < $x』が真(true)となるように$xの値を変更すると(99など)、偽(false)が出力されるので試してみてください。

まとめ

論理演算子は大きく分けて3つのパターン、論理積(&&)、論理和(||)、否定(!)があることを解説しました。

論理演算子を使用した論理式は頻繁に使われる構文なので、しっかりと覚えておきましょう。