PHP 論理演算子 【初級編 第28回】

この記事は2012年11月30日に書かれたものです。内容が古い可能性がありますのでご注意ください。


PHP 論理演算子 【初級編 第28回】

論理演算子

前回はエラー演算子について記述しました。
今回は論理演算子について記述していきたいと思います。

論理演算子の概要

論理演算子は、よく条件式などで使用される演算子で、
1つの条件ではなく、複数の条件が正しかった場合などに true値を返したり、false値を返したりすることができます。
例えば、$hennsuu1 < 2 と $hensuu2 == 5 この両方が正しかった場合に trueを返したりすることができます。
またどちらか一方が正しければ、true を返すといったことも可能です。

論理演算子の記述方法

論理演算子も他の演算子のように、2つの条件や値の間に記述します。(1つの条件を比較する場合ものもありますが)
例えば以下では、右側の条件と左側の条件の両方が正しかった場合に true値を返すサンプルです。
両方の条件が正しいかを確認するには and という論理演算子を使用します。

サンプル1

<?php
 $atai = ((1 < 2) and (4 == 4));
 echo var_dump($atai);
?>

結果は以下のようになります。
ブラウザ確認画像

両方の条件が成立しないといけないので
片方の条件が成立しなければ false値を返します。

サンプル2

<?php
 $atai = ((1 < 2) and (5 == 4));
 echo var_dump($atai);
?>

結果は以下のようになります。
ブラウザ確認画像

論理演算子の一覧

論理演算子には、以下のようなものがあります。

演算子 意味
and 左右の条件が両方とも trueなら trueを返す。どちらかもしくは両方が falseなら falseを返す
or 左右の条件の片方もしくは両方が trueなら trueを返す。どちらも falseなら falseを返す
xor 左右の条件が片方だけが trueなら trueを返す。どちらも true もしくはどちらも falseなら falseを返す
! 値や条件が trueならば falseを返す。値や条件が falseならば trueを返す
&& andと同じ意味だが、優先順位が異なる
|| orと同じ意味だが、優先順位が異なる

論理演算子、他の演算子の優先順位の関係

上記の && や || の優先順位が異なるとは、例えば以下のような場合に $atai に格納されるものが異なってくる

例えば以下のような場合には、$atai1, $atai2 の両方が falseを返しそうですがそうなりません。

<?php
 $atai1 = 1 < 2 and 2 > 3;
 $atai2 = 1 < 2 && 2 > 3;
 echo var_dump($atai1);
 echo "<br>";
 echo var_dump($atai2);
?>

結果は $atai1 が true で $atai2 が false になります。

ブラウザ確認画像

なぜ結果がことなるのか

なぜ $atai1 が true を返すのかというと、
and の優先順位が =(イコール)よりも弱いために()などで条件を括ってやらないと、
先頭の値である 1 3 の部分は比較されても $atai1 に格納されることはありません。
そして bool型である $atai1 を var_dumpで確認すると、trueを返すので上記の現象が起きていました。

&& を使用した場合 =(イコール)よりも優先順位が高いため、
1 3 の結果が $atai2 に格納されたということになり、
そして bool型である $atai1 を var_dumpで確認すると、falseという値が期待通りにでるということでした。

プログラムを作成する際には演算子の優先順位にも気をつけなければいけません。

ひとまず今回はここまででにします。

  • このエントリーをはてなブックマークに追加

PAGE TOP