UPDATE:2019年11月11日
PHP の 論理演算子
論理演算子とは
- 論理演算子 は 論理値を評価し論理値を返す
- 論理演算子 は アルファベット版 と 記号版 がある
- アルファベット版の優先順位が上
論理演算子は論理値を評価し、結果を論理値で返します。オペランドは論理値とされます。(オペランドとは演算子の対象となる数値や文字列や式などの値のこと)。論理値は「真」「偽」を表す値であり、キーワード「TREU」と「FALSE」で表されます。論理値の詳細についてはこちらを参照下さい。
論理演算子はアルファベット版と記号版の2種類あります。アルファベット版と記号版では評価の優先順位が異なり、アルファベット版の優先順位が上です。
論理演算子の種類
論理演算子の種類、優先順位、結合時の評価です。すべての演算子の種類や優先順位はこちらを参照下さい。
演算子 | 名前 | 優先順位 | 結合時の評価 | 例 | 結果 |
---|---|---|---|---|---|
and | 論理積 | 3 | left | $a and $b | $a および $b が共に TRUE の場合に TRUE |
or | 論理和 | 1 | left | $a or $b | $a または $b のどちらかが TRUE の場合に TRUE |
xor | 排他的論理和 | 2 | left | $a xor $b | $a または $b のどちらかが TRUE でかつ両方とも TRUE でない場合に TRUE |
! | 否定 | 6 | right | ! $a | $a が TRUE でない場合 TRUE |
&& | 論理積 | 5 | left | $a && $b | $a および $b が共に TRUE の場合に TRUE |
|| | 論理和 | 4 | left | $a || $b | $a または $b のどちらかが TRUE の場合に TRUE |
計算の例
「 and (論理積) 」「 && (論理積) 」
- 左右両方 TRUE の場合に TRUE、それ以外は FALSE を返す
「 and (論理積) 」「 && (論理積) 」は、左辺オペランド と 右辺オペランド の 両方 が TRUE である場合に TRUE を返します。どちらか一方でも FALSE であれば、FALSE を返します。
(オペランドとは演算子の対象となる数値や文字列や式などの値のこと)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!-- サンプルコード --> <?php //左右両方TRUE if(TRUE and TRUE) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //左右両方TRUE $a = 1; $b = 2; if(($a === 1) and ($b === 2)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //左右両方TRUE $a = 1; $b = 2; if(($a + $b === 3) and ($b - $a === 1)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; ?> |
結果は
結果はTRUEです。
結果はTRUEです。
となります。
左辺オペランド か 右辺オペランド の どちらか片方が FALSE であれば FALSE を返します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!-- サンプルコード --> <?php //左右片方FALSE if(TRUE and FALSE) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //左右片方FALSE $a = 1; $b = 2; if(($a === 1) and ($b === -2)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //左右片方FALSE $a = 1; $b = 2; if(($a + $b === 3) and ($b - $a === -1)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; ?> |
結果は
結果はFALSEです。
結果はFALSEです。
となります。
「 or (論理和) 」「 || (論理和) 」
- 左右どちらか一方が TRUE の場合に TRUE を返す
- 左右両方 TRUE の場合 TRUE を返す
- 左右両方 FALSE の場合 FALSE を返す
「 or (論理和) 」「 || (論理和) 」は、左辺オペランド か 右辺オペランド の どちらか一方でも TRUE であれば TRUE を返します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!-- サンプルコード --> <?php //左右片方TRUE if(TRUE or FALSE) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //左右片方TRUE $a = 1; $b = 2; if(($a === 1) or ($b === -2)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //左右片方TRUE $a = 1; $b = 2; if(($a + $b === 3) or ($b - $a === -1)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; ?> |
結果は
結果はTRUEです。
結果はTRUEです。
となります。
左辺オペランド と 右辺オペランド の 両方が TRUE であれば TRUE を返します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!-- サンプルコード --> <?php //左右両方TRUE if(TRUE or TRUE) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //左右両方TRUE $a = 1; $b = 2; if(($a === 1) or ($b === 2)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //左右両方TRUE $a = 1; $b = 2; if(($a + $b === 3) or ($b - $a === 1)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; ?> |
結果は
結果はTRUEです。
結果はTRUEです。
となります。
左辺オペランド と 右辺オペランド の 両方が FALSE であれば FALSE を返します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!-- サンプルコード --> <?php //両方FALSE if(FALSE or FALSE) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //両方FALSE $a = 1; $b = 2; if(($a === -1) or ($b === -2)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //両方FALSE $a = 1; $b = 2; if(($a + $b === -3) or ($b - $a === -1)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; ?> |
結果は
結果はFALSEです。
結果はFALSEです。
となります。
「 xor (排他的論理和) 」
- 左右のどちらかが TRUE で、且つ、両方 が TRUE でない場合に TRUE を返す
- 左右両方 TRUE の場合は FALSE を返す
- 左右両方 FALSE の場合は FALSE を返す
「 xor (排他的論理和) 」は、左辺オペランド と 右辺オペランド の どちらかが TRUE で、さらに、両方が TRUE でない場合に TRUE を返します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <!-- サンプルコード --> <?php //片方TRUEで両方TREUでない if(TRUE xor FALSE) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //片方TRUEで両方TREUでない $a = 1; $b = 2; if(($a + $b === 3) xor ($b - $a === -1)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //片方TRUEで両方TREUでない $a = 1; $b = 2; if(($a + $b === -3) xor ($b - $a === 1)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; ?> |
結果は
結果はTRUEです。
結果はTRUEです。
となります。
左辺オペランド と 右辺オペランド の両方が TRUE や FALSE の場合は FALSE を返します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <!-- サンプルコード --> <?php //両方TRUE if(TRUE xor TRUE) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //両方TRUE $a = 1; $b = 2; if(($a + $b === 3) xor ($b - $a === 1)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //両方FALSE if(FALSE xor FALSE) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; ?> |
結果は
結果はFALSEです。
結果はFALSEです。
となります。
「 ! (否定) 」
- 右辺オペランド が、 TRUE でない場合に TRUE を返す
1 2 3 4 5 6 7 8 9 10 | <!-- サンプルコード --> <?php //右辺オペランドがFALSE if(!FALSE) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //右辺オペランドがFALSE $a = 1; $b = 2; if(!($a + $b === -3)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; ?> |
結果は
結果はTRUEです。
となります。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | <!-- サンプルコード --> <h3>「and(論理積)」「&&(論理積)」 結果がTRUEの場合は左右両方TRUE</h3> <?php //左右両方TRUE if(TRUE and TRUE) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //左右両方TRUE $a = 1; $b = 2; if(($a === 1) and ($b === 2)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //左右両方TRUE $a = 1; $b = 2; if(($a + $b === 3) and ($b - $a === 1)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; ?> <h3>「and(論理積)」「&&(論理積)」 結果がFALSEの場合は左右片方FALSE</h3> <?php //左右片方FALSE if(TRUE and FALSE) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //左右片方FALSE $a = 1; $b = 2; if(($a === 1) and ($b === -2)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //左右片方FALSE $a = 1; $b = 2; if(($a + $b === 3) and ($b - $a === -1)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; ?> <h3>「or(論理和)」「||(論理和)」 結果がTRUEの場合は左右片方TRUE</h3> <?php //左右片方TRUE if(TRUE or FALSE) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //左右片方TRUE $a = 1; $b = 2; if(($a === 1) or ($b === -2)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //左右片方TRUE $a = 1; $b = 2; if(($a + $b === 3) or ($b - $a === -1)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; ?> <h3>「or(論理和)」「||(論理和)」 結果がTRUEの場合は左右両方TRUE</h3> <?php //左右両方TRUE if(TRUE or TRUE) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //左右両方TRUE $a = 1; $b = 2; if(($a === 1) or ($b === 2)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //左右両方TRUE $a = 1; $b = 2; if(($a + $b === 3) or ($b - $a === 1)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; ?> <h3>「or(論理和)」「||(論理和)」 結果がFALSEの場合は両方FALSE</h3> <?php //両方FALSE if(FALSE or FALSE) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //両方FALSE $a = 1; $b = 2; if(($a === -1) or ($b === -2)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //両方FALSE $a = 1; $b = 2; if(($a + $b === -3) or ($b - $a === -1)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; ?> <h3>「xor(排他的論理和)」 結果がTRUEの場合は片方TRUEで両方TREUでない</h3> <?php //片方TRUEで両方TREUでない if(TRUE xor FALSE) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //片方TRUEで両方TREUでない $a = 1; $b = 2; if(($a + $b === 3) xor ($b - $a === -1)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //片方TRUEで両方TREUでない $a = 1; $b = 2; if(($a + $b === -3) xor ($b - $a === 1)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; ?> <h3>「xor(排他的論理和)」 結果がFALSEの場合は両方TRUE</h3> <?php //両方TRUE if(TRUE xor TRUE) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //両方TRUE $a = 1; $b = 2; if(($a + $b === 3) xor ($b - $a === 1)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; ?> <h3>「!(否定)」 結果がTRUEの場合は右辺オペランドがFALSE</h3> <?php //右辺オペランドがFALSE if(!FALSE) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; echo "<br>\n"; //右辺オペランドがFALSE $a = 1; $b = 2; if(!($a + $b === -3)) echo '結果はTRUEです。'; else echo '結果はFALSEです。'; ?> |
結果はTRUEです。
結果はTRUEです。
結果はTRUEです。
「and(論理積)」「&&(論理積)」 結果がFALSEの場合は左右片方FALSE
結果はFALSEです。
結果はFALSEです。
結果はFALSEです。
「or(論理和)」「||(論理和)」 結果がTRUEの場合は左右片方TRUE
結果はTRUEです。
結果はTRUEです。
結果はTRUEです。
「or(論理和)」「||(論理和)」 結果がTRUEの場合は左右両方TRUE
結果はTRUEです。
結果はTRUEです。
結果はTRUEです。
「or(論理和)」「||(論理和)」 結果がFALSEの場合は両方FALSE
結果はFALSEです。
結果はFALSEです。
結果はFALSEです。
「xor(排他的論理和)」 結果がTRUEの場合は片方TRUEで両方TREUでない
結果はTRUEです。
結果はTRUEです。
結果はTRUEです。
「xor(排他的論理和)」 結果がFALSEの場合は両方TRUE
結果はFALSEです。
結果はFALSEです。
「!(否定)」 結果がTRUEの場合は右辺オペランドがFALSE
結果はTRUEです。
結果はTRUEです。
タグ(=記事関連ワード)
日付
最終更新日:2019年11月11日