PHP PHP入門講座 プログラミング

【PHPプログラミング入門講座】論理演算子

PHPプログラミングのキービジュアル

2つ以上の条件の組み合わせ

記事「【PHPプログラミング入門講座】条件分岐 (if文)」で、「もし[条件A]ならば〜を実行する」という記述は、if文を使って次のように書きました。

if(条件A) {
  実行する処理の内容
}

それでは、条件を2つにして「もし[条件A]かつ[条件B]ならば〜を実行する」のように2つの条件を満たす必要がある場合は、どのように書けば良いでしょうか?

今まで説明した内容を使って書くと、次のように書けます。

if(条件A) {
  if(条件B) {
    実行する処理の内容
  }
}

if文を入れ子構造で使用する連続技です(笑)
これは、これで正しいプログラムの書き方です。

それでは、「もし[条件A]または[条件B]ならば〜を実行する」の場合は、どのように書けば良いでしょうか?

・・・・・・。

今まで説明した内容の範囲では書けませんよね?(笑)

PHPには、この「条件A かつ 条件B」や「条件A または 条件B」を記述するための演算子があります。
今回は、そのような演算子について説明します。

条件A かつ 条件B

「条件A かつ 条件B」は、PHPプログラムでは演算子「&&」(アンド2つ)を使って次のように書きます。

<構文>

if(条件A && 条件B) {
  条件を満たしたときの処理
}

この演算子「&&」のことを「論理演算子」と呼びます。

条件Aと条件Bの結果(true / false)に対して「条件A && 条件B」の結果がどのようになるか(true / false)を以下の表にまとめました。

条件A 条件B 式の結果
条件A && 条件B true true true
true false false
false true false
false false false

「条件A」と「条件B」のいずれもがtrueの場合だけ「条件A && 条件B」がtrueになり、その他の場合は全てfalseになります。

論理演算子「&&」を使ったサンプルプログラム

論理演算子「&&」を使ったサンプルプログラムを以下に書きます。

サンプルプログラム1

<?php
  $result1 = true;
  $result2 = false;
  if($result1 &amp;&amp; $result2) {
    echo '「$result1 &amp;&amp; $result2」の結果は true です。';
  } else {
    echo '「$result1 &amp;&amp; $result2」の結果は true ではありません。';
  }

<実行結果>

「$result1 && $result2」の結果は true ではありません。

<解説>

これは、構文に当てはめると$result1 が「条件A」で、$result2 が「条件B」になります。

変数$result1の値がtrueで、変数$result2がfalseであり、「$result1 && $result2」はfalseになるため、elseブロックの「echo '「$result1 && $result2」の結果は true ではありません。';」の処理が実行されます。

サンプルプログラム2

<?php
  $num = 50;
  if($num >= 10 &amp;&amp; $num < 100) {
    echo $num . 'は10以上100未満です。';
  } else {
    echo $num . 'は10以上100未満ではありません。';
  }

<実行結果>

50は10以上100未満です。

<解説>

まず、このif文の条件($num >= 10 && $num < 100)ですが、
PHPには、比較演算子「<」「>」「<=」「>=」は、論理演算子「&&」よりも優先して処理される
という演算子の優先順位のルールが適用されます。

それを踏まえて、構文に当てはめると、「$num >= 10」が「条件A」で、「$num < 100」が「条件B」になります。

変数$numの値が50なので、「$num >= 10」の結果はtrue、「$num < 100」の結果もtrueとなるため、「$num >= 10 && $num < 100」の結果はtrueになり、ifブロックの「echo $num . 'は10以上100未満です。';」の処理が実行されます。

なお、演算子の優先順位が分かりやすいように ( ) を使って

if($num >= 10 &amp;&amp; $num < 100) {

の部分を

if(($num >= 10) &amp;&amp; ($num < 100)) {

のように記述しても問題ありません。同じ処理が行われます。

条件A または 条件B

「条件A または 条件B」は、PHPプログラムでは演算子「||」(縦棒2本)を使って次のように書きます。

<構文>

if(条件A || 条件B) {
  条件を満たしたときの処理
}

この演算子「||」も「論理演算子」です。

条件Aと条件Bの結果(true / false)に対して「条件A || 条件B」の結果がどのようになるか(true / false)を以下の表にまとめました。

条件A 条件B 式の結果
条件A || 条件B true true true
true false true
false true true
false false false

「条件A」と「条件B」のいずれかがtrueの場合に「条件A || 条件B」がtrueになり、両方ともfalseの場合はfalseになります。

論理演算子「||」を使ったサンプルプログラム

論理演算子「||」を使ったサンプルプログラムを以下に書きます。

サンプルプログラム1

<?php
  $result1 = true;
  $result2 = false;
  if($result1 || $result2) {
    echo '「$result1 || $result2」の結果は true です。';
  } else {
    echo '「$result1 || $result2」の結果は true ではありません。';
  }

<実行結果>

「$result1 || $result2」の結果は true です。

<解説>

これは構文に当てはめると、$result1 が「条件A」で、$result2 が「条件B」になります。
変数$result1の値がtrueで、変数$result2がfalseであるため、「$result1 || $result2」はtrueになり、ifブロックの「echo '「$result1 || $result2」の結果は true です。';」の処理が実行されます。

サンプルプログラム2

<?php
  $num = 50;
  if($num <= 10 || $num >= 100) {
    echo $num . 'は10以下または100以上です。';
  } else {
    echo $num . 'は10以下または100以上ではありません。';
  }

<実行結果>

50は10以下または100以上ではありません。

<解説>

これは、構文に当てはめると、「$num <= 10」が「条件A」で、「$num >= 100」が「条件B」になります。

変数$numの値が50であり、「$num <= 10」の結果はfalse、「$num >= 100」の結果もfalseとなるため、「$num <= 10 || $num >= 100」の結果はfalseになり、elseブロックの「echo $num . 'は10以下または100以上ではありません。';」の処理が実行されます。

演算子の優先順位が分かりやすいように ( ) を使って、ifの条件の記述を

  if(($num <= 10) || ($num >= 100)) {

のように記述しても問題ありません。同じ処理が行われます。

否定(〜ではない)(NOT)

「指定した条件ではない」場合をif文の条件にすることもできます。
その場合は、条件の前に「 ! 」(エクスクラメーションマーク、いわゆるビックリマーク)を付与して、次のように書きます。

if(!条件A) {
  条件を満たしたときの処理
}

「条件A」に対して「!条件 A」の結果がどのようになるか(true / false)を以下の表にまとめました。

条件A 式の結果
!条件A true false
false true

「条件A」がtrueの場合は「!条件A」はfalseになり、「条件A」がfalseの場合は「!条件A」はtrueになります。

論理演算子「 ! 」を使ったサンプルプログラム

論理演算子「 ! 」を使ったサンプルプログラムを以下に書きます。

サンプルプログラム1

<?php
  $result1 = true;
  if(!$result1) {
    echo '「!$result1」の結果は true です。';
  } else {
    echo '「!$result1」の結果は true ではありません。';
  }

<実行結果>

「!$result1」の結果は true ではありません。

<解説>

$result1の値がtrueであるため、「!$result1」結果は逆になりfalseです。
よって、elseブロックの「echo '「!$result1」の結果は true ではありません。';」が実行されます。

サンプルプログラム2

<?php
  $num = 50;
  if(!($num <= 10)) {
    echo $num . 'は10以下ではありません。';
  } else {
    echo $num . 'は10以下です。';
  }

<実行結果>

50は10以下ではありません。

<解説>

変数$numの値が50であるため、「$num <= 10」はfalseになりますが、さらに「!($num <= 10)」となっているため、結果は逆転してtrueになります。
よって、ifブロックの「echo $num . 'は10以下ではありません。';」が実行されます。

その他の論理演算子

論理演算子「xor」(排他的論理和)

他にも論理演算子「XOR」というものがあります。
この論理演算子を使う機会は、あまり無いと思います。
2つの条件がある場合に、片方がtrue、もう一方がfalseの場合にtrueになり、両方ともtrueまたは両方ともfalseの場合はfalseになります。
XORのことを「排他的論理和」と呼びます。

排他的論理和は、PHPプログラムでは演算子「xor」(アルファベット小文字3文字)を使って次のように書きます。

<構文>

if(条件A xor 条件B) {
  条件を満たしたときの処理
}

条件Aと条件Bの結果(true / false)に対して「条件A xor 条件B」の結果がどのようになるか(true / false)を以下の表にまとめました。

条件A 条件B 式の結果
条件A xor 条件B true true false
true false true
false true true
false false false

この論理演算子は、滅多に使うことはありませんので紹介までにしておきます。

論理演算子「and」「or」

あと、論理演算子「and」と「or」というものがあります。
「条件A and 条件B」は「条件A && 条件B」と同じ意味であり、「条件A or 条件B」は「条件A || 条件B」と同じ意味です(※注1)。
この論理演算子も、滅多に使うことが無いと思いますので紹介までにしておきます。

※注1:複数の演算子が組み合わさった記述をした場合に「and」や「or」は、他の演算子よりも最も優先順位が低いという点が、「&&」と「||」との唯一の違いです。

論理演算子のまとめ

以上、PHPの論理演算子について、一通り説明しました。
表でまとめると次のようになります。

説明
$a && $b $aがtrueかつ$bがtrueの場合はtrue、そうでない場合はfalse
$a || $b $aがtrueまたは$bがtrueの場合はtrue、そうでない場合はfalse
!$a $aがtrueの場合はfalse、$aがfalseの場合はtrue
$a xor $b $aと$bの片方がtrueでもう一方がfalseの場合はtrue、そうでない場合はfalse
$a and $b $a && $b と同じ意味
$a or $b $a || $b と同じ意味

おわりに

プログラムが複雑になり、複数の条件の組み合わせでの条件判定が必要になった場合は、論理演算子を使ってif文の条件を記述します。
論理演算子は頻繁に使うので、この記事の内容を読み直して理解しましょう。
また、次の記事に論理演算子の演習問題を掲載していますので、ぜひチャレンジして解いて、理解しましょう。

PHPプログラミング入門講座 〜 全記事一覧 〜

-PHP, PHP入門講座, プログラミング
-, , ,

Copyright© ハッピー・プログラミング・ライフ , 2020 All Rights Reserved.