Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP】論理演算子の書き方と使い方の基本

この記事では、PHPプログラミングで条件を判断する際に不可欠な「論理演算子」について、基礎から解説します。否定(!)、論理和(||)、論理積(&&)、排他的論理和(xor)といった主要な演算子の役割や書き方を、具体的なコード例を通してわかりやすく学び、複数の条件を組み合わせた複雑な判定ロジックを実装するスキルが身につきます。

作成日: 更新日:

開発環境

  • OS: Windows10
  • Editor: Visual Studio Code
  • PHP: 8.0以降

PHPの論理演算子とは

PHPにおける論理演算子とは、最終的に「true」(真)または「false」(偽)のいずれかの結果を返す演算子式のことです。プログラムの中で、特定の条件が正しいか否かを判断する際に使用され、この「true」や「false」の結果に基づいて、次に実行する処理を決定します。

システム開発において、例えば「ユーザーがログインしているか」や「入力された値が条件を満たしているか」といった、複数の条件を組み合わせて判定する必要がある場合に、論理演算子が非常に重要な役割を果たします。これらの判定結果は、if文などの条件分岐処理で利用され、プログラムの振る舞いを制御するために不可欠です。

PHPには、否定(not)、論理和(or)、論理積(and)の3つの基本的な論理演算子があります。これらはそれぞれ異なる判定ロジックを持っています。

よく使われる記号は以下の通りです。

  • !(否定):ある条件の真偽を反転させます。例えば、条件がtrueであればfalseに、falseであればtrueに変換します。
    • 例: !true は false になります。!false は true になります。
  • ||(論理和):複数の条件のうち、少なくとも1つがtrueであれば、式全体の結果をtrueとします。全ての条件がfalseの場合にのみ、結果はfalseになります。
    • 例: true || false は true になります。false || true も true になります。false || false は false になります。
  • &&(論理積):複数の条件が全てtrueの場合にのみ、式全体の結果をtrueとします。1つでもfalseの条件があれば、結果はfalseになります。
    • 例: true && true は true になります。true && false は false になります。false && true も false になります。

これらの論理演算子を1つの式の中で複数使用する場合、PHPでは演算の優先順位が定められています。

優先順位は 「! > && > ||」 です。 これは、「どの演算子が先に処理されるか」を示しています。具体的には、最も優先されるのは否定演算子 ! で、次に論理積演算子 && が処理され、最後に論理和演算子 || が処理されます。

この優先順位を理解することは、意図した通りの正確な条件判定を行うために重要です。もし、この優先順位と異なる順序で演算を行いたい場合は、かっこ () を使用して明示的に演算の順序を指定することができます。かっこで囲まれた部分は、常に他の演算子よりも先に計算されます。

サンプルコード

php/chapter03/01.php

このコードは、AND(論理積)演算子「&&」の基本的な動作を示しています。AND演算子は、左側の条件と右側の条件の**両方がtrue(真)の場合にのみ、結果がtrue**になります。

ここでは「true && true」と記述されており、左側の条件も右側の条件もtrueであるため、演算結果はtrueになります。var_export($result, true)は、変数$resultの内容を人間が読める形式で出力するための関数です。したがって、このコードを実行すると「true && true の結果: true」と表示されます。

01.php
1<?php
2// AND(論理積):
3// 両方の条件が true のときのみ true を返す
4// true && true の場合
5$result = (true && true);  // 両方が true のため結果は true
6echo "true && true の結果: " . var_export($result, true) . "\n";  // true
7

php/chapter03/02.php

このコードもAND(論理積)演算子「&&」の動作を示しています。ここでは「true && false」と記述されています。

AND演算子は、両方の条件がtrueの場合にのみtrueを返します。この例では、左側の条件はtrueですが、右側の条件がfalse(偽)です。そのため、どちらか一方がfalseであるため、全体の演算結果はfalseになります。このコードを実行すると「true && false の結果: false」と表示されます。

02.php
1<?php
2// true && false の場合
3$result = (true && false);  // true && false のため結果は false
4echo "true && false の結果: " . var_export($result, true) . "\n";  // false
5

php/chapter03/03.php

このコードもAND(論理積)演算子「&&」の動作を示しています。ここでは「false && true」と記述されています。

AND演算子は、両方の条件がtrueの場合にのみtrueを返します。この例では、左側の条件がfalseであり、右側の条件はtrueです。しかし、AND演算子は「両方true」が条件であるため、どちらか一方がfalseであれば全体の演算結果はfalseになります。このコードを実行すると「false && true の結果: false」と表示されます。

03.php
1<?php
2// false && true の場合
3$result = (false && true);  // false && true のため結果は false
4echo "false && true の結果: " . var_export($result, true) . "\n";  // false
5

php/chapter03/04.php

このコードもAND(論理積)演算子「&&」の動作を示しています。ここでは「false && false」と記述されています。

AND演算子は、両方の条件がtrueの場合にのみtrueを返します。この例では、左側の条件も右側の条件もfalseです。したがって、AND演算子の条件を満たさないため、全体の演算結果はfalseになります。このコードを実行すると「false && false の結果: false」と表示されます。

04.php
1<?php
2// false && false の場合
3$result = (false && false);  // 両方が false のため結果は false
4echo "false && false の結果: " . var_export($result, true) . "\n";  // false
5

php/chapter03/05.php

このコードは、OR(論理和)演算子「||」の基本的な動作を示しています。OR演算子は、左側の条件と右側の条件の**どちらか一方でもtrue(真)であれば、結果がtrue**になります。

ここでは「true || true」と記述されており、両方の条件がtrueです。OR演算子では、どちらか一方がtrueであればtrueになるため、両方trueの場合も結果はtrueになります。このコードを実行すると「true || true の結果: true」と表示されます。

05.php
1<?php
2// OR(論理和)
3// どちらかの条件が true のとき true を返す
4// true || true の場合
5$result = (true || true);  // 両方が true のため結果は true
6echo "true || true の結果: " . var_export($result, true) . "\n";  // true
7

php/chapter03/06.php

このコードもOR(論理和)演算子「||」の動作を示しています。ここでは「true || false」と記述されています。

OR演算子は、どちらか一方でもtrueであれば結果がtrueになります。この例では、左側の条件がtrueであり、右側の条件はfalseです。しかし、左側の条件がtrueであるため、全体の演算結果はtrueになります。このコードを実行すると「true || false の結果: true」と表示されます。

06.php
1<?php
2// true || false の場合
3$result = (true || false);  // true || false のため結果は true
4echo "true || false の結果: " . var_export($result, true) . "\n";  // true
5

php/chapter03/07.php

このコードもOR(論理和)演算子「||」の動作を示しています。ここでは「false || true」と記述されています。

OR演算子は、どちらか一方でもtrueであれば結果がtrueになります。この例では、左側の条件がfalseですが、右側の条件がtrueです。右側の条件がtrueであるため、全体の演算結果はtrueになります。このコードを実行すると「false || true の結果: true」と表示されます。

07.php
1<?php
2// false || true の場合
3$result = (false || true);  // false || true のため結果は true
4echo "false || true の結果: " . var_export($result, true) . "\n";  // true
5

php/chapter03/08.php

このコードもOR(論理和)演算子「||」の動作を示しています。ここでは「false || false」と記述されています。

OR演算子は、どちらか一方でもtrueであれば結果がtrueになります。この例では、左側の条件も右側の条件もfalseです。どちらもtrueではないため、OR演算子の条件を満たさず、全体の演算結果はfalseになります。このコードを実行すると「false || false の結果: false」と表示されます。

08.php
1<?php
2// false || false の場合
3$result = (false || false);  // 両方が false のため結果は false
4echo "false || false の結果: " . var_export($result, true) . "\n";  // false
5

php/chapter03/09.php

このコードは、NOT(論理否定)演算子「!」の動作を示しています。NOT演算子は、与えられた条件の真偽を反転させます。つまり、**trueであればfalseに、falseであればtrue**にします。

最初の行では「!true」と記述されており、trueの否定なので結果はfalseになります。 次の行では「!false」と記述されており、falseの否定なので結果はtrueになります。

このコードを実行すると、それぞれ「!true の結果: false」と「!false の結果: true」と表示されます。

09.php
1<?php
2// NOT(論理否定)
3// 条件が false のとき true を返し、条件が true のとき false を返す
4$result = !true;  // true の否定で結果は false
5echo "!true の結果: " . var_export($result, true) . "\n";  // false
6
7$result = !false;  // false の否定で結果は true
8echo "!false の結果: " . var_export($result, true) . "\n";  // true
9

php/chapter03/10.php

このコードは、XOR(排他的論理和)演算子「xor」の基本的な動作を示しています。XOR演算子は、左側の条件と右側の条件が**異なる場合にのみ、結果がtrue**になります。両方の条件が同じ(両方trueまたは両方false)場合は、結果はfalseになります。

ここでは「true xor true」と記述されており、両方の条件がtrueで同じです。そのため、XOR演算子の条件を満たさず、結果はfalseになります。このコードを実行すると「true xor true の結果: false」と表示されます。

10.php
1<?php
2// XOR(排他的論理和)
3// 二つの入力が異なるときだけ出力はtrueとなり、二つの入力が同じ場合は出力はfalseを返す。
4// true XOR true の場合
5$result = (true xor true);  // 両方が true なので結果は false
6echo "true xor true の結果: " . var_export($result, true) . "\n";  // false
7

php/chapter03/11.php

このコードもXOR(排他的論理和)演算子「xor」の動作を示しています。ここでは「true xor false」と記述されています。

XOR演算子は、両方の条件が異なる場合にのみtrueを返します。この例では、左側の条件がtrueで、右側の条件がfalseです。これらは異なる条件であるため、全体の演算結果はtrueになります。このコードを実行すると「true xor false の結果: true」と表示されます。

11.php
1<?php
2// true XOR false の場合
3$result = (true xor false);  // 入力が異なるので結果は true
4echo "true xor false の結果: " . var_export($result, true) . "\n";  // true
5

php/chapter03/12.php

このコードもXOR(排他的論理和)演算子「xor」の動作を示しています。ここでは「false xor true」と記述されています。

XOR演算子は、両方の条件が異なる場合にのみtrueを返します。この例では、左側の条件がfalseで、右側の条件がtrueです。これらは異なる条件であるため、全体の演算結果はtrueになります。このコードを実行すると「false xor true の結果: true」と表示されます。

12.php
1<?php
2// false XOR true の場合
3$result = (false xor true);  // 入力が異なるので結果は true
4echo "false xor true の結果: " . var_export($result, true) . "\n";  // true
5

php/chapter03/13.php

このコードもXOR(排他的論理和)演算子「xor」の動作を示しています。ここでは「false xor false」と記述されています。

XOR演算子は、両方の条件が異なる場合にのみtrueを返します。この例では、左側の条件も右側の条件もfalseで同じです。そのため、XOR演算子の条件を満たさず、結果はfalseになります。このコードを実行すると「false xor false の結果: false」と表示されます。

13.php
1<?php
2// false XOR false の場合
3$result = (false xor false);  // 両方が false なので結果は false
4echo "false xor false の結果: " . var_export($result, true) . "\n";  // false
5

php/chapter03/14.php

ここからは、これまで学習した論理演算子を使った練習問題です。このコードでは、3教科の点数をそれぞれ変数に設定しています。$subject1には70点、$subject2には65点、$subject3には80点が代入されています。これらの点数を使って、後のステップで合計点や平均点を計算し、特定の条件を満たすかどうかを判定します。

14.php
1<?php
2// 3教科の平均点が60点以上、かつ合計点数が200点以上かどうかを判定する練習問題
3// 各教科の点数を設定
4$subject1 = 70;
5$subject2 = 65;
6$subject3 = 80;
7

php/chapter03/15.php

このコードでは、前のステップで設定した3教科の点数を使って、合計点と平均点を計算しています。

まず、$total_score変数に$subject1、$subject2、$subject3の点数を足し合わせた結果(70 + 65 + 80 = 215)が代入されます。 次に、$average_score変数に$total_scoreを3で割った結果(215 / 3 = 約71.666...)が代入されます。これらの計算結果が、次のステップの条件判定で使われます。

15.php
1<?php
2// 合計点数と平均点数を計算
3$total_score = $subject1 + $subject2 + $subject3;
4$average_score = $total_score / 3;
5

php/chapter03/16.php

このコードでは、if文とAND(論理積)演算子「&&」を使って、合格か不合格かを判定しています。

条件式「$average_score >= 60 && $total_score >= 200」は、以下の2つの条件を同時に満たすかどうかをチェックしています。

  1. 平均点($average_score)が60点以上であること
  2. 合計点($total_score)が200点以上であること

AND演算子「&&」が使われているため、この2つの条件が両方ともtrueの場合にのみ、if文の中の「echo "合格\n";」が実行されます。 もしどちらかの条件でもfalseであれば、elseブロックの中の「echo "不合格\n";」が実行されます。 前のステップで計算した値は$average_scoreが約71.666...(60点以上)で、$total_scoreが215点(200点以上)です。両方の条件が満たされるため、このコードを実行すると「合格」と表示されます。

16.php
1<?php
2// 条件を判定
3if ($average_score >= 60 && $total_score >= 200) {
4    echo "合格\n";
5} else {
6    echo "不合格\n";
7}
8

php/chapter03/17.php

このコードは、計算した合計点数と平均点数を画面に表示しています。

echo文を使って、文字列と変数の内容を結合して出力しています。 「合計点数: $total_score\n」では、$total_score変数に入っている値(215)が表示されます。 「平均点数: $average_score\n」では、$average_score変数に入っている値(約71.666...)が表示されます。 \nは改行を意味します。このコードを実行すると、以下のように表示されます。

17.php
1<?php
2// 結果を表示
3echo "合計点数: $total_score\n";
4echo "平均点数: $average_score\n";
5

おわりに

この記事では、PHPプログラミングにおける論理演算子の基本と、その具体的な使い方を学習しました。 !(否定)、||(論理和)、&&(論理積)、そしてxor(排他的論理和)といった主要な演算子が、プログラム内で条件がtrueかfalseかを判断するためにどのように使われるのか、多くのコード例を通じて確認できたと思います。 複数の条件を組み合わせて判定する際に、これらの論理演算子が不可欠であること、また演算の優先順位とカッコの活用方法も理解を深めていただけたことでしょう。 今回学んだ論理演算子は、システム開発における条件分岐処理の基盤となり、より複雑な判定ロジックを正確に実装するために非常に重要です。 ぜひ、様々な条件判定に挑戦し、論理的な思考力とプログラミングスキルをさらに向上させていきましょう。

関連コンテンツ