論理演算子の種類と利用方法

比較演算子を使うと値同士を比較する条件式を作成できますが、複数の条件を組み合わせたい場合には論理演算子を使用します。論理演算子も結果として TRUE または FALSE を返します。例えば、条件式Aと条件式Bの両方がTRUEの場合や、どちらか一方が TRUE の場合などの条件を表現できます。ここでは PHP で論理演算子を使用する方法について解説します。

論理演算子とは

論理演算子は "且つ" や "または" といった 2 つの条件式を組み合わせてより複雑な条件式を作成する場合に使用します。

PHP で用意されている論理演算子は次の通りです。

演算子記述例意味
&& または anda && baとbが共にTRUEの場合にTRUE
|| または ora || baかbの少なくとも1つがTRUEの場合にTRUE
xora || baかbのどちらか1つだけがTRUEの場合にTRUE
!!aaがTRUEの時にFALSE、FALSEの時にTRUE

論理演算子では左辺及び右辺に比較演算子などを使った条件式を記述します。そしてそれぞれの条件式の評価の結果と、記述した論理演算子によって式全体の評価を論理値で返します。

では順に確認してみます

※ 演算子に関する優先順位については「すべての演算子の優先順位と結合順位」を参照して下さい。

論理積(AND)

論理積(AND)は演算子 && の左辺及び右辺の条件式が共に TRUE の場合のみ全体の式の評価が TRUE となります。

左辺条件式 && 右辺条件式

※演算子は && の代わりに and も使用できます。

左辺条件式 and 右辺条件式

左辺及び右辺の条件式の評価毎に式全体の評価がどうなるのかは次の通りです。

左辺右辺全体の式
TRUETRUETRUE
TRUEFALSEFALSE
FALSETRUEFALSE
FALSEFALSEFALSE

具体的には次のように使用します。

$old = 18;

if ($old > 10 && $old < 30){
  echo "変数は10より大きく30より小さい";
}

上記では左辺の条件式「$old > 10」と右辺の条件式「$old < 30」が共に TRUE の場合に、 if 文の条件式が TRUE を返します。

サンプルコード

では簡単なプログラムで試してみます。

<?php
$old = 25;
$pref = "東京都";

echo "年齢 ", $old, "、住所 ", $pref, "\n";
if ($old >= 20 && $pref == "東京都"){
  echo "条件を満たしています\n";
}else{
  echo "東京都在住でないか、年齢が20歳未満です\n"; 
}

$pref = "大阪府";

echo "年齢 ", $old, "、出身地 ", $pref, "\n";
if ($old >= 20 && $pref == "東京都"){
  echo "条件を満たしています\n";
}else{
  echo "東京都在住でないか、年齢が20歳未満です\n"; 
}

作成したプログラムを sample.php として保存しました。その後でコマンドプロンプトを起動し、次のように実行しました。

php sample.php

論理演算子

論理積の場合は、左右の条件式がどちらも TRUE の場合だけ TRUE となるためこのような結果となりました。

論理和(OR)

論理和(OR)は演算子 || の左辺及び右辺の条件式の少なくとも一つが TRUE の場合に全体の式の評価が TRUE となります。少なくとも一つなので両方の条件式が TRUE でも全体は TRUE となります。

左辺条件式 || 右辺条件式

※演算子は || の代わりに or も使用できます。

左辺条件式 or 右辺条件式

左辺及び右辺の条件式の評価毎に式全体の評価がどうなるのかは次の通りです。

左辺右辺全体の式
TRUETRUETRUE
TRUEFALSETRUE
FALSETRUETRUE
FALSEFALSEFALSE

具体的には次のように使用します。

$math = 45;
$eng = 82;

if ($math > 50 || $eng > 50){
  echo "合格です";
}

上記では左辺の条件式「$math > 50」と右辺の条件式「$eng > 50」のいずれか 1 つでも TRUE の場合に、 if 文の条件式が TRUE を返します。

サンプルコード

では簡単なプログラムで試してみます。

<?php
$math = 48;
$eng = 78;

echo "算数 ", $math, "点、英吾 ", $eng, "点\n";
if ($math > 50 || $eng > 60){
  echo "合格です\n";
}else{
  echo "不合格です\n"; 
}

$math = 37;
$eng = 58;

echo "算数 ", $math, "点、英吾 ", $eng, "点\n";
if ($math > 50 || $eng > 60){
  echo "合格です\n";
}else{
  echo "不合格です\n"; 
}

作成したプログラムを sample.php として保存しました。その後でコマンドプロンプトを起動し、次のように実行しました。

php sample.php

論理演算子

論理和の場合は、左右の条件式の少なくとも一つが TRUE の場合なら全体が TRUE となるためこのような結果となりました。

排他的論理和(XOR)

排他的論理和(XOR)は演算子 xor の左辺及び右辺のどちらか一つの条件式が TRUE の場合に全体の式の評価が TRUE となります。どちらか一つなので両方の条件式が TRUE の場合は全体は FALSE となります。

左辺条件式 xor 右辺条件式

左辺及び右辺の条件式の評価毎に式全体の評価がどうなるのかは次の通りです。

左辺右辺全体の式
TRUETRUEFALSE
TRUEFALSETRUE
FALSETRUETRUE
FALSEFALSEFALSE

具体的には次のように使用します。

$math = 45;
$eng = 82;

if ($math < 50 xor $eng < 50){
  echo "補修です";
}

上記では左辺の条件式「$suugaku < 50」と右辺の条件式「$eigo < 50」のどちらか 1 つだけが TRUE の場合に、 if 文の条件式が TRUE を返します。

サンプルコード

では簡単なプログラムで試してみます。

<?php
$math = 48;
$eng = 78;

echo "算数 ", $math, "点、英吾 ", $eng, "点\n";
if ($math < 50 xor $eng < 50){
  echo "補修を受けてください\n";
}

作成したプログラムを sample.php として保存しました。その後でコマンドプロンプトを起動し、次のように実行しました。

php sample.php

論理演算子

排他的論理和の場合は、左右の条件式の一つだけが TRUE の場合なら全体が TRUE となるためこのような結果となりました。

論理否定(NOT)

論理否定(NOT)は演算子 ! の右辺の条件式が TRUE の場合に全体の式の評価が FALSE となり、右辺の条件式が FALSE の場合に全体の式の評価が TRUEとなります。

! 右辺条件式

右辺の条件式の評価毎に式全体の評価がどうなるのかは次の通りです。

右辺全体の式
TRUEFALSE
FALSETRUE

論理否定は論理値の値を反転させるためのものなので、右辺の条件式の記述の仕方を変えれば必要はなくなります。ただ、論理否定を使った方が条件式が分かりやすく記述できる場合もあります。

具体的には次のように使用します。

$user = FALSE;

if (!$user){
  echo "先に会員登録をお願いします";
}

上記では右辺の条件式「$user」が TRUE の場合、 if 文の条件式は FALSE を返し、「$user」が FALSE の場合、 if 文の条件式は TRUE を返しを返します。

※論理否定の演算子 ! は優先順位が高い演算子のため、右側の条件式を括弧で括らないと意図したとおりの処理が行われない可能性がありますので注意して下さい。

サンプルコード

では簡単なプログラムで試してみます。

<?php
$login = TRUE;

if (!$login){
  echo "ログインしてください\n";
}else{
  echo "申し込みを開始します\n";   
}

作成したプログラムを sample.php として保存しました。その後でコマンドプロンプトを起動し、次のように実行しました。

php sample.php

論理演算子

論理否定の場合は、右の条件式が FALSE の場合なら全体が TRUE となるためこのような結果となりました。

-- --

PHP における論理演算子について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。