[PHP] 比較演算子の一覧とその役割についてまとめ

PHP数値, 文字列, 比較, 演算子

いつもなんとなく使っていますが、あまりきちんと理解していないことが分かりました。

特に=====の違いとか、、普段無意識に使っていましたが、具体的な違いは?と言われると言葉に詰まってしまう感じです。

ということでphp.net比較演算子のページに記載されている演算子について自己理解を深めてみます。

比較演算子一覧

演算子名前結果
== $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 より大きいか、0等しいか、小さい場合に、 $a が $b より大きいか、0等しいか、小さい場合に、 それぞれ、0より大きい か、0か、0より小さい
PHP 7 以降で使用可能。

型の相互変換を行ってから比較する演算子とそうでないもので分けられます。

  • ==
  • !=
  • <>

型の相互変換についてはphp.netには以下のように記されています。

整数値を文字列と比較したり、比較に数値形式の文字が含まれる場合は、文字列が 数値に変換され、 数値としての比較を行います。

https://www.php.net/manual/ja/language.operators.comparison.php#language.operators.comparison

数字が文字列として存在していた場合でも数値に変換して比較を行うことになります。

以下の場合、結果はTRUEとなります。

if(1 == "1") {
echo "yes";
}
else {
echo "no";
}
// yes

型の一致も含めて比較を行いたい場合は型の変換を行わずに比較を行う以下の===を使用します。

if(1 === "1") {
echo "yes";
}
else {
echo "no";
}
// no

結果は当然、FALSEとなります。

不等号については型の相互変換の有無の記載がなかったので確実なところはわかりませんが、以下の検証ではすべて結果は変わらなかったのであまり意識しないでもいいのかもしれません。

例: 2 > 1

結果

21結果
数値数値TRUE
数値文字列TRUE
文字列 文字列 TRUE
文字列 数値 TRUE

宇宙船演算子とは

PHP7から使用可能になった演算子だそうです。

記号は<==>です。

説明には「$a が $b より大きいか、0等しいか、小さい場合に、 それぞれ、0より大きい か、0か、0より小さい integer。」と記載されています。

どのような比較を行い、どのような値を返すのかさっぱりなのでググりましたところ、以下のサイトで分かりやすく説明してくれていました。ありがとうございます。

宇宙船演算子とは、2つの式を比較し、比較の結果によって、1, 0, -1を返す演算子です。

サンプルでは、$aと$bを比較していますが、$a > $bであれば1, $a = $bであれば0, $a < $bであれば-1を返します。

https://php-jp.com/spaceship-operator/

明確に理解できました。この演算子を使うことで比較をシンプルにできそうですね。

PHP数値, 文字列, 比較, 演算子