PHP - BASIC - 6. PHPの分岐構造 - 4. 論理演算子

if 文の条件式に論理演算子を使うことで複数の条件式を組み合わせて評価できます。ここでは論理演算子についておさらいしておきましょう。論理演算子の主要なものは以下のとおりです。

種類 演算子 役割 使い方 読み方
論理積 && AND(かつ) $x > 5 && $y > 2 $xが5より大きい、
かつ、$yが2より大きい
論理和 || OR(あるいは) $x > 5 || $y > 2 $xが `5より大きい、
あるいは、$yが2より大きい
否定 ! NOT(否定) !($x > 5 && $y > 2) 「$xが5より大きい、
かつ、$yが2より大きい」ではない
$xが5以下、あるいは$yが2以下と同じ)

他にも排他的論理和を示す xor 演算子や、処理の優先度のことなる and 演算子、 or 演算子も存在します。

論理積( &&

ここではまず論理積を示す && 演算子の使い方から見ていきましょう。次のプログラム( choice4.php )を作成します。

<?php
$diceA = 4;
$diceB = 3;

if ($diceA >= 4 && $diceB >= 4) {
  echo "Win";
} else {
  echo "Lose";
}

このプログラムでは2つの変数 $diceA$diceB にそれぞれ 43 を代入した後、if文の条件式において論理積( && )を使った条件式を定義しています。

if ($diceA >= 4 && $diceB >= 4) {

論理積( && )は左辺の評価結果( $diceA >= 4 )と右辺の評価結果( $diceB >= 4 )から結果を算出します。論理積( && )は左辺と右辺の評価結果の両方が true の場合に、全体の評価結果として true を返し、それ以外の場合は false を返します。このプログラムの場合は左辺の $diceA >= 4 の評価結果は true となりますが、右辺の $diceB >= 4 の評価結果は false となるため、論理積( && )の評価結果は false となります。そのためプログラムを実行すると画面には Lose が表示されます。実際にプログラムを実行してみましょう。

$ php choice4.php
Lose

実行結果から論理積( && )による条件式の評価が上手く機能していることがわかります。さきほどのプログラム( choice4.php )の変数 $diceB の値を 3 から 5 に変更してみましょう。

<?php
$diceA = 4;
$diceB = 5; // edit

if ($diceA >= 4 && $diceB >= 4) {
  echo "Win";
} else {
  echo "Lose";
}

このプログラムの場合は左辺の $diceA >= 4 の評価結果は true となり、右辺の $diceB >= 4 の評価結果も true となるため、論理積( && )の評価結果は true となります。そのためプログラムを実行すると画面には Win が表示されます。実際にプログラムを実行してみましょう。

$ php choice4.php
Win

実行結果から論理積( && )による条件式の評価が上手く機能していることがわかります。

論理和( ||

次に論理和を示す || 演算子の使い方を見ていきましょう。次のプログラム( choice5.php )を作成します。

<?php
$diceA = 4;
$diceB = 3;

if ($diceA >= 4 || $diceB >= 4) {
  echo "Win";
} else {
  echo "Lose";
}

このプログラムでは2つの変数 $diceA$diceB にそれぞれ 43 を代入した後、if文の条件式において論理和( || )を使った条件式を定義しています。

if ($diceA >= 4 || $diceB >= 4) {

論理和( || )は左辺の評価結果( $diceA >= 4 )と右辺の評価結果( $diceB >= 4 )から結果を算出します。論理和( || )は左辺と右辺のの評価結果のいずれかが true の場合に、全体の評価結果として true を返し、それ以外の場合は false を返します。このプログラムの場合は左辺の $diceA >= 4 の評価結果は true となり、右辺の $diceB >= 4 の評価結果は false となるため、論理和( || )の評価結果は true となります。そのためプログラムを実行すると画面には Win が表示されます。実際にプログラムを実行してみましょう。

$ php choice5.php
Win

実行結果から論理和( || )による条件式の評価が上手く機能していることがわかります。さきほどのプログラム( choice5.php )の変数 $diceA の値を 4 から 1 に変更してみましょう。

<?php
$diceA = 1; // edit
$diceB = 3;

if ($diceA >= 4 || $diceB >= 4) {
  echo "Win";
} else {
  echo "Lose";
}

このプログラムの場合は左辺の $diceA >= 4 の評価結果は false となり、右辺の $diceB >= 4 の評価結果も false となるため、論理和( || )の評価結果は false となります。そのためプログラムを実行すると画面には Lose が表示されます。実際にプログラムを実行してみましょう。

$ php choice5.php
Lose

実行結果から論理和( || )による条件式の評価が上手く機能していることがわかります。

否定( !

最後に論理和を示す ! 演算子の使い方を見ていきましょう。次のプログラム( choice6.php )を作成します。

<?php
$dice = 4;

if (!($dice > 3)) {
  echo "Win";
} else {
  echo "Lose";
}

このプログラムでは変数 $dice4 を代入し、 if 文の条件式において否定( ! )を使った条件式を定義しています。

if (!($dice > 3)) {

否定( ! )は対象となる式(この場合、 ($dice > 3) )の評価結果( truefalse )を反転させる役割があります。このプログラムでは変数$diceには4が代入されているため ($dice > 3) の評価結果は true となりますが、否定( ! )によって評価結果が反転するため false になります。そのためプログラムを実行すると Lose が表示されます。それではプログラムを実行してみましょう。

$ php choice6.php
Lose

実行結果から否定( ! )を使った条件式が期待通りに動作していることがわかります。また今回のプログラム( choice6.phpif 文の条件式は否定を使わずに以下のように書き換えることもできます。

// if (!($dice > 3)) { と同じ
if ($dice <= 3) {

まとめ

  • 論理演算子によって複数の条件を組み合わせることができる
  • && は論理積(AND、かつ)、 || は論理和(OR、あるいは)を意味する
  • ! は否定を意味し、対象となる式の評価結果( truefalse )が反転する