PHP講座入門

演算子 色々な種類 その2

比較演算子

 比較演算子は、その名前の通りに、二つの値を比較します。そして、真(TRUE)か偽(FALSE)を返します。では一覧を見てみましょう。

比較演算子
名前 結果
$a == $b 等しい 型の相互変換をした後で $a が $b に等しい時に TRUE
$a === $b 等しい $a が $b に等しく、および同じ型である場合に TRUE
$a != $b 等しくない 型の相互変換をした後で $a が $b に等しくない場合に TRUE
$a <> $b 等しくない 型の相互変換をした後で $a が $b に等しくない場合に TRUE
$a !== $b 等しくない $a が $b と等しくないか、同じ型でない場合に TRUE
$a < $b より少ない $a が $b より少ない時に TRUE
$a > $b より多い $a が $b より多い時に TRUE
$a <= $b より少ないか等しい $a が $b より少ないか等しい時に TRUE
$a >= $b より多いか等しい $a が $b より多いか等しい時に TRUE
$a <=> $b 宇宙船 $a が $b より小さいときに負の値、 $b と等しいときに 0、 $b より大きいときに正の値。 PHP 7 以降で使用可能

 何となくわかるでしょうか? 型の変換が入るかどうかで微妙に結果が変わるので注意が必要です。

 では例を考えてみましょう。

コードの中に var_dump というのが出てきます。これはデバッグ(間違いを探して直すこと)をするときによく使います。括弧内の変数式を実行した結果などを、どんな型のどんな値かを出力してくれます。
<?php
var_dump(1 == 1);    // 結果は bool(true)
var_dump(1 < 0);     // 結果は bool(false)
var_dump("1" == 1);  // 結果は bool(true)
var_dump("1" === 1); // 結果は bool(false)
var_dump("a" == 0);  // 結果は bool(true)
 2~5行目までは納得できると思いますが、6行目は理解できましたか?

 これは型変換のマジックです。"a" が型変換で整数型に変換されます。そうすると、型の自動変換でも触れましたが、"a" は 0 に変換されるのです。それで、0 == 0 ということになり、結果は true となります。

 

 宇宙船なんていうのも出てきますが、これは主にソート関連で用いるものなので、ここでは割愛します。興味のある方は、マニュアルをご覧になってみてください。

論理演算子

 比較演算子と切り離せないのが、論理演算子です。どんなものがあるのか、一覧を見てみましょう。

論理演算子
名前 結果
$a and $b 論理積 $a および $b が共に TRUE の場合に TRUE
$a or $b 論理和 $a または $b のどちらかが TRUE の場合に TRUE
$a xor $b 排他的論理和 $a または $b のどちらかが TRUE でかつ両方とも TRUE でない場合に TRUE
! $a 否定 $a が TRUE でない場合 TRUE
$a && $b 論理積 $a および $b が共に TRUE の場合に TRUE
$a || $b 論理和 $a または $b のどちらかが TRUE の場合に TRUE

 論理和と論理積が二種類あります。やっていることは同じなのですが、優先順位が異なります。詳しくは演算子 優先順位をご覧ください。

 では実際に例を見てみましょう。

<?php
var_dump(false || true);    // 結果はbool(true)
var_dump(false && true);    // 結果はbool(false)
var_dump(! false);          // 結果はbool(true)
var_dump(!(false || true)); // 結果はbool(false)
 5行目がちょっと変わっています。括弧の中が先に評価され、true になります。その後、否定論理演算子で、それがひっくり返って、falseになるという訳です。

 

 比較演算子と一緒に考えると、こんな風になります。

<?php
$a = 5;
$b = 6;

var_dump($a == 5 || $b == 4); // 結果はbool(true)
var_dump($a == 5 && $b == 4); // 結果はbool(false)
var_dump(!($a < 4));          // 結果はbool(true)
 どうでしょうか? 一つしか比較できなかった比較演算子が、論理演算子を使うことによって、複数の結果をまとめることができるようになります。これは後で出てきますが、制御構造で重要な役割を果たします。

 

この他の演算子

 今ご紹介した他にも、ビット演算子エラー制御演算子実行演算子配列演算子型演算子があります。

 初心者の皆さんには重要度が低いので、ご自分で調べてみてください。もし、講座の中で出てきましたら、その時説明します。

目次

×