論理演算子
比較演算子では単独の条件式を記述することができますが、もう少し複雑に「xxxかつyyy」や「xxxもしくはyyy」のように条件式を組み合わせてより複雑な条件式を利用したい場合があります。このような場合に使用するのが論理演算子です。
PHPで用意されている論理演算子は次の通りです。
演算子 | 記述例 | 意味 |
---|---|---|
&& 又は and | a && b | aとbが共に真の場合に真 |
|| 又は or | a || b | aかbの少なくとも1つが真の場合に真 |
xor | a || b | aかbのどちらか1つだけが真の場合に真 |
! | !a | aが真の時に偽、偽の時に真 |
論理演算子では左辺及び右辺に関係演算子などを使った条件式を記述します。そしてそれぞれの条件式の評価の結果と論理演算子のよって式全体の評価を論理値で返します。
では順に確認してみます
※演算子に関する優先順位は「演算子の優先順位」を参照して下さい。
論理積(AND)
論理積(AND)は演算子「&&」の左辺及び右辺の条件式が共に真の場合のみ全体の式の評価が真となります。
左辺条件式 && 右辺条件式 左辺条件式 and 右辺条件式
※演算子は「&&」の代わりに「and」も使用できます。
左辺及び右辺の条件式の評価毎に式全体の評価がどうなるのかは次の通りです。
左辺 | 右辺 | 全体の式 |
---|---|---|
真 | 真 | 真 |
真 | 偽 | 偽 |
偽 | 真 | 偽 |
偽 | 偽 | 偽 |
具体的には次のように使用します。
$old = 18; if ($old > 10 && $old < 30){ print "変数は10より大きく30より小さい"; }
上記では左辺の条件式「$old > 10」と右辺の条件式「$old < 30」が共にTRUEの場合に式全体「$old > 10 && $old < 30」がTRUEを返します。
では簡単なプログラムで試して見ます。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>PHPテスト</title> </head> <body> <p>PHPのテストです。</p> <p> <?php $old = 25; $pref = '東京'; if ($old >= 20 && $pref == '東京'){ print "東京出身で20歳以上です"; } ?> </p> </body> </html>
上記のファイルをWWWサーバのドキュメントルート以下に設置しブラウザからアクセスすると次のように表示されます。
論理和(OR)
論理和(OR)は演算子「||」の左辺及び右辺の少なくともどちらか一つの条件式が真の場合に全体の式の評価が真となります。
左辺条件式 || 右辺条件式 左辺条件式 or 右辺条件式
※演算子は「||」の代わりに「or」も使用できます。
左辺及び右辺の条件式の評価毎に式全体の評価がどうなるのかは次の通りです。
左辺 | 右辺 | 全体の式 |
---|---|---|
真 | 真 | 真 |
真 | 偽 | 真 |
偽 | 真 | 真 |
偽 | 偽 | 偽 |
具体的には次のように使用します。
$suugaku = 45; $eigo = 82; if ($suugaku > 50 || $eigo > 50){ print "合格です"; }
上記では左辺の条件式「$suugaku > 50」と右辺の条件式「$eigo > 50」のいずれか1つでもTRUEの場合に式全体「$suugaku > 50 || $eigo > 50」がTRUEを返します。
では簡単なプログラムで試して見ます。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>PHPテスト</title> </head> <body> <p>PHPのテストです。</p> <p> <?php $suugaku = 45; $eigo = 82; print '数学:'.$suugaku.',英語:'.$eigo.'<br />'; if ($suugaku > 50 || $eigo > 50){ print "合格です<br />'"; }else{ print "不合格です<br />"; } $suugaku = 42; $eigo = 39; print '数学:'.$suugaku.',英語:'.$eigo.'<br />'; if ($suugaku > 50 || $eigo > 50){ print "合格です"; }else{ print "不合格です"; } ?> </p> </body> </html>
上記のファイルをWWWサーバのドキュメントルート以下に設置しブラウザからアクセスすると次のように表示されます。
論理和では演算子の左辺と右辺の条件式が共に偽の場合に全体が偽となります。
排他的論理和(XOR)
排他的論理和(XOR)は演算子「xor」の左辺及び右辺のどちらか一つの条件式が真の場合に全体の式の評価が真となります。
左辺条件式 xor 右辺条件式
左辺及び右辺の条件式の評価毎に式全体の評価がどうなるのかは次の通りです。
左辺 | 右辺 | 全体の式 |
---|---|---|
真 | 真 | 偽 |
真 | 偽 | 真 |
偽 | 真 | 真 |
偽 | 偽 | 偽 |
具体的には次のように使用します。
$suugaku = 45; $eigo = 82; if ($suugaku < 50 xor $eigo < 50){ print "補修です"; }
上記では左辺の条件式「$suugaku < 50」と右辺の条件式「$eigo < 50」のどちらか1つだけがTRUEの場合に式全体「$suugaku < 50 xor $eigo < 50」がTRUEを返します。
では簡単なプログラムで試して見ます。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>PHPテスト</title> </head> <body> <p>PHPのテストです。</p> <p> <?php $suugaku = 45; $eigo = 82; print '数学:'.$suugaku.',英語:'.$eigo.'<br />'; if ($suugaku < 50 xor $eigo < 50){ print "補修を受けて下さい'"; } ?> </p> </body> </html>
上記のファイルをWWWサーバのドキュメントルート以下に設置しブラウザからアクセスすると次のように表示されます。
今回は英語と数学のどちらか1つだけが50点を下回った場合に補修を受けさせたい場合のサンプルです。
論理否定(NOT)
論理否定(NOT)は演算子「!」の右辺の条件式が真の場合に全体の式の評価が偽となり、右辺の条件式が偽の場合に全体の式の評価が真となります。
! 右辺条件式
右辺の条件式の評価毎に式全体の評価がどうなるのかは次の通りです。
右辺 | 全体の式 |
---|---|
真 | 偽 |
偽 | 真 |
論理否定は論理値の値を反転させるためのものなので、右辺の条件式の記述の仕方を変えれば必要はなくなります。ただ、論理否定を使った方が条件式が分かりやすく記述できる場合も多くあります。
具体的には次のように使用します。
$pref = '大阪'; if (!($pref == '東京')){ print "東京以外にお住まいの方"; }
上記では右辺の条件式「$pref == '東京'」がTRUEの場合は式全体「! $pref == '東京'」がFALSEを返し、「$pref == '東京'」がFALSEの場合は式全体「! $pref == '東京'」がTRUEを返します。
※論理否定の演算子「!」は優先順位が高い演算子のため、右側の条件式を括弧で括らないと意図したとおりの処理が行われない可能性がありますので注意して下さい。
では簡単なプログラムで試して見ます。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>PHPテスト</title> </head> <body> <p>PHPのテストです。</p> <p> <?php $pref = '大阪'; if (!($pref == '東京')){ print "東京以外にお住まいの方"; } ?> </p> </body> </html>
上記のファイルをWWWサーバのドキュメントルート以下に設置しブラウザからアクセスすると次のように表示されます。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。