Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

  1. トップページ
  2. PHP入門編 - 論理演算子とは

論理演算子とは

みなさまどうもおはこんばんにちわ。

続いて『論理演算子』(ろんりえんざんし)についてやっていきましょう。これは前回解説した『if文』と併用されることが多い演算子となります。考え方としては『~かつ~だった場合』や『~または~だった場合』といったような感じになりますね。使用頻度がめちゃめちゃ高いのでバッチリマスターしちゃいましょう。

まず論理演算子は『&&』、『||』、『xor』、『!』の4つがあります。

JISキーボードの場合の『|』のタイピング方法は『shift』キーを押しながら『¥』キーを押せば入力できます。USキーボードの場合は『shift』キーを押しながら『\』キーになりますね。

では最初に『&&』から確認していきましょう。まず『&&』は『論理積演算子』(ろんりせきえんざんし)と呼ばれます。実際の現場では『論理積演算子』という単語はあまり使われません。単純に『アンドアンド』とか呼ばれていることが多い気がします。

さて、この『&&』の使い方ですが、『if文』と組み合わせるとこのような記述方法になります。

<?php
if(true && true){
    var_dump('実行されました!');
}

『if文』の『()』に注目ですね、『true && true』と記述されています。『&&』は『両オペランド(両辺)がtrue』だったときにその式全体の評価が『true』となる、といった演算をします。上記の場合は両オペランドが『true』となっていますね、なので『if文』の処理が実行されるといった感じです。逆にこのように

<?php
if(true && false){
    var_dump('実行されました!');
}

片一方が『false』となっている場合は実行されません。『false && false』となっている場合も同じです。『&&』は解説書などでは『~かつ~』と解説されることが多いです。もし忘れてしまったら「if文 かつ」と検索してみると幸せになれるかもしれません。

さて続いて『||』の使い方です。『論理和演算子』(ろんりわえんざんし)と呼ばれます。これは『両オペランド(両辺)の片一方がtrue』だったときにその式全体の評価が『true』となる、といった演算をします。

<?php
if(true || false){
    var_dump('実行されました!');
}

上記は『true || false』となっていますね。これは片方のオペランドが『true』となっているので『if文』が実行されます。続いて以下を確認してください。

<?php
if(false || false){
    var_dump('実行されました!');
}

この場合は『false || false』となっており両方が『false』ですね。なので、実行されません。ちなみに左右どちらが『true』でも実行されますので『false || true』となっていたり、『true || true』となっていても実行されます。間違いやすいので気をつけて下さい。

続いて『xor』です。こちらは『排他的論理和演算子』(はいたてきろんりわえんざんし)って呼ばれます。なんだか名前が難しいですね。『xor』はどちらか一方が『true』になっていた場合のみ実行されます。以下がサンプルです。

<?php
if(true xor false){
    var_dump('実行されました!');
}

どちらか一方が『true』なので『true xor true』や『false xor false』だと実行されません。実行されるパターンは『true xor false』、または『false xor true』って感じになりますね。

続いて『!』です。『!』は『論理否定演算子』(ろんりひていえんざんし)と呼ばれます。ちなみに『論理演算子』としての『!』が「論理否定演算子」と呼ばれる、という話なので単純に記号としての『!』は『ビックリマーク』とか『エクスクラメーション』とか『感嘆符』と呼んでしまってOKです。これは以下のように使います。

<?php
if(!false){
    var_dump('実行されました!');
}

『!false』に注目です。なにやら『false』の頭に『!』がくっついていますね。

この『!』はちょっと独特で、まずオペランドは1つしかありません。『&&』と『||』は左右のオペランドを評価する、といった感じの演算でしたが、『!』のオペランドは1つだけです。

さてこの『!』ですが、そのオペランドの値を『真偽値』として評価したあとその値を反転させます。

先ほどの記事の『true』扱いされる値と『false』扱いされる値をちょっと思い出してみましょう。以下になりますね。以下は全て『false』扱い、以下に載ってない値は全て『true』になります。

  • 真偽値『false』
  • 数値『0』
  • 浮動小数点数値『0.0』
  • 空の文字列(''とか"")および文字列の『0』
  • 空の配列(連想配列)
  • NULL

例えばPHPにおいての『1』という数値は『true』扱いされますね。というわけで『!1』と記述すると『false』が返ってきます。こんな感じになりますね。

<?php
var_dump(!1); // 『false』が出力されます。

続いて『''』に『!』をくっつけて『!''』と書いてみます。『''』は空の文字列です。PHPでは空の文字列は『false』扱いされます。ということは『true』となるはずですよね。

以下が実験結果です。

<?php
var_dump(!''); // 『true』が出力されます。

いかがでしょうか。このようにオペランドの『真偽値』としての評価を反転させた『真偽値』を返すのが『!』です。これもよく使われる構文なので覚えておきましょう。

『&&』は『and』、『||』は『or』に書き直すことができます。

<?php
if(true and true){ // 『if(true && true)』と記述していることと同じです。
    var_dump('実行されました!');
}

if(true or false){ // 『if(true || false)』と記述していることと同じです。
    var_dump('実行されました!');
}

体感的には『&&』と『||』を使う方が多数派な気がします。

というわけで今回の記事はここまでです。

続いての記事では『switch文』をやっていきます。『switch文』が終わったらちょっとしたプログラムを書いてみたいと思いますので、その際に『論理演算子』とか『if文』とかをどのような感じで使用するのか掴んで頂ければと思います。

ではではこの辺で。またお会いしましょう。

この記事は桜舞が執筆致しました。

著者が愛する小型哺乳類

桜舞 春人 Sakurama Haruto

ISDN時代から様々なコンテンツを制作しているちょっと髪の毛が心配な東京在住のプログラマー。生粋のロングスリーパーで、10時間以上睡眠を取らないと基本的に体調が悪い。好きなだけ寝れる生活を送るのが夢。ゲームとスポーツと音楽が大好き。誰か髪の毛を分けて下さい。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。