PHP入門 論理演算子
論理演算子は、複数の条件式を論理的に結合しその結果をtrue/falseとして返します。比較演算子と組み合わせて利用するのが一般的です。論理演算子を利用することで、より複雑な条件式を表現できるようになります。
主な論理演算子
演算子 | 概要 | 用例 |
---|---|---|
$$ | 論理積。左右の式がともにtrueの場合にtrue | $x && $y 結果:false |
and | 論理積。左右の式がともにtrueの場合にtrue | $x and $y 結果:false |
|| | 論理和。左右の式いずれかがtrueの場合にtrue | $x || $y 結果:true |
or | 論理和。左右の式いずれかがtrueの場合にtrue | $x or $y 結果:true |
xor | 排他的論理和。左右の式いずれかがtrueで、あkつ、双方ともtrueではない場合にtrue | $x xor $y 結果:true |
! | 否定。式がtrueの場合はfalse、falseの場合はtrue | !$x 結果:false |
論理演算子の結果は、左右の式の真偽値によって決まります。
左式/右式の値と具体的な論理演算の結果のまとめ
左式 | 右式 | &&、and | ||、or | xor |
---|---|---|---|---|
true | true | true | true | false |
true | false | false | true | true |
false | true | false | true | true |
false | false | false | false | false |
PHPでは、空文字列やnull値、ゼロ、空の配列などはすべてfalse、それ以外の値はtrueと見なされます。論理演算子に渡すオペランドは、必ず厳密な論理型の値である必要はありません。
論理積演算子(&&、and)と論理和演算子(||、or)が2種類用意されているのは、優先順位が違うためです。&&、||演算子のほうがand、orよりも先に評価されます。
ショートカット演算(短絡演算)
論理演算子では「ある乗件の下では、左式だけが評価されて右式が評価されない」場合があります。このような演算のことをショートカット演算あるいは短絡演算と言います。
論理積(&&、and)演算子では、左式がfalseである場合、右式がtrue/falseのいずれであっても条件式全体は必ずfalseとなります。つまり、左式がfalseであった場合、論理積演算子では右式を評価する必要がありません。そこで、論理積演算子は右式の実行をスキップします。論理和(||、or)演算子でも同様です。
<?php
$x = 1;
if ($x !== 2) { print '実行されました。<br />'; } //結果:実行されました。
$x === 2 or print '実行されました。'; //結果:実行されました。➊
➊は論理和演算子では左式がfalseである場合にだけ右式が実行されます。これを使用したコードになります。