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||、orxor
truetruetruetruefalse
truefalsefalsetruetrue
falsetruefalsetruetrue
falsefalsefalsefalsefalse

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である場合にだけ右式が実行されます。これを使用したコードになります。