【PHP】論理式・論理演算子 – 論理和、論理積、否定について解説

論理式では論理演算を扱うことができます。
論理演算を使うと、複雑な論理式を実現できるようになります。

ここでは論理演算について解説します。

★ 内容

  • 論理演算
  • 論理和
  • 論理積
  • 否定
  • 論理演算子

論理演算とは

論理演算とは論理値に対して演算することです。
2つの論理値を1つの論理値にまとめる論理和論理積の演算や、論理値を反転させる否定などがあります。

論理和

論理和は2つの論理値の一方でも真の場合、演算結果を真とします。
一般的には『または』という用語を使って説明されることが多く、論理値であるAとBがある場合、『AまたはBが真の場合、真とする』と要約されます。

論理和の全パターンは次の表のようになります。

AB論理和
truetruetrue
truefalsetrue
falsetruetrue
falsefalsefalse

論理積

論理積は2つの論理値の両方が真の場合、演算結果を真とします。
一般的には『かつ』という用語を使って説明されることが多く、論理値であるAとBがある場合、『Aが真かつBも真の場合、真とする』と要約されます。

論理積の全パターンは次の表のようになります。

AB論理積
truetruetrue
truefalsefalse
falsetruefalse
falsefalsefalse

否定

否定は1つの論理値の結果を反転させます。
一般的には論理値であるAがある場合、『Aが真なら偽とし、Aが偽なら真とする』と要約されます。

否定の全パターンは次の表のようになります。

A否定
truefalse
falsetrue

論理演算子

論理演算をプログラムで実現するには論理演算子を使います。

代表的な論理演算子は論理和、論理積、否定の3つです。

論理演算論理演算子意味記述例
論理和||左右オペランドの一方でも真の場合は、真とする$x < 0 || 10 < $x
論理積&&左右オペランドの両方が真の場合は、真とする$x && $y
否定!オペランドが真の場合は偽、偽の場合は真とする! $x

基本構文

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

論理積

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

※ オペランドは論理値型の値

論理和

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

※ オペランドは論理値型の値

否定

! ( オペランド )

※ オペランドは論理値型の値

サンプルコード

論理和、論理積、否定についてサンプルコードをご覧ください。

サンプルコード:論理和

$xの値が『0より小さいまたは10より大きい』であるかを判定するサンプルコードは次のようになります。

ソースコード

<?php

$x = 99;

$a = $x < 0;
$b = 10 < $x;

$result = $a || $b;

var_dump( $result );

?>

実行結果

bool(true)

5行目、6行目の論理式で$aはfalse、$bはtrueとなります。
そして、8行目の論理和の論理演算子では$bが真であるため、演算結果は真となります。

サンプルコード:論理積

$xの値が『0以上かつ10以下』であるかを判定するサンプルコードは次のようになります。

ソースコード

<?php

$x = 99;

$a = 0 <= $x;
$b = $x <= 10;

$result = $a && $b;

var_dump( $result );

?>

実行結果

bool(false)

5行目、6行目の論理式で$aはfalse、$bもfalseとなります。
そして、8行目の論理積の論理演算子では$a$bの両方が真でないため、演算結果は偽となります。

サンプルコード:否定

$xの値が『0以上』であるかを判定する否定を使ったサンプルコードは次のようになります。

ソースコード

<?php

$x = 8;

$a = $x < 0;

$result = !( $a );

var_dump( $result );

?>

実行結果

bool(true)

5行目の論理式では否定演算子を使うため、『0以上』を反転した条件である『0より小さいか』を比較演算子で表現しており、$aはfalseになります。

そして、7行目の否定の論理演算子では$aが偽のため、演算結果は真となります。

なお、否定演算子はビックリマーク(!)ですが、どの範囲にかかっているかを明確にするため、括弧で囲んでいます。

1つの式にまとめる

一般的には簡単な論理式は1つにまとめることが多くあります。

上記サンプルコードでは理解を深めていただくため、『比較演算子を使った論理式』と『論理演算子を使った論理式』を分けましたが、1つにまとめると次のようになります。

サンプルコード:論理和 ver.2

ソースコード

<?php

$x = 99;

$result = $x < 0 || 10 < $x;

var_dump( $result );

?>

サンプルコード:論理積 ver.2

ソースコード

<?php

$x = 99;

$result = 0 <= $x && $x <= 10;

var_dump( $result );

?>

サンプルコード:否定 ver.2

ソースコード

<?php

$x = 8;

$result = !( $x < 0 );

var_dump( $result );

?>

比較演算子の演算結果は論理値となるため、プログラム実行時には論理演算子の左右オペランドは論理値となり、正常に動作します。

演習問題

問題1

解答例

任意の値が『900以上かつ999以下』であるかを判定するプログラムを作成してください。
なお、以下の条件を満たすものとします。

  • 任意の値はコマンドライン引数で与える
  • 判定結果はvar_dump関数で出力

実行例

コマンドライン

php practice.php 939

実行結果

bool(true)

問題2

解答例

任意の値が『0より小さいまたは999より大きい』かを判定するプログラムを作成してください。
なお、以下の条件を満たすものとします。

  • 任意の値はコマンドライン引数で与える
  • 判定結果はvar_dump関数で出力

実行例

コマンドライン

php practice.php -123

実行結果

bool(true)

まとめ

論理演算子は主に論理和、論理積、否定があります。
論理演算子と比較演算子を組み合わせた論理式は使うことが多いので覚えておきましょう。