PHPの比較演算子の使い方について書いています。
それぞれの比較演算子について、サンプルコードを用意して動作を確認してみました。
載せているサンプルコードについては、PHPのバージョン8.1.8を使って検証しています。
公式サイトのこちらの記事で比較演算子についてまとめられています。
PHPの比較演算子とは?
比較演算子を使うことで、2つの値を比較して結果を返してくれます。
例えば「===
」の比較演算子です。
左と右の値を比較して、同じであればtrue、違う場合にはfalseが返ってきます。
下記のように比較することができます。
<?php
$a = 1;
$b = 1;
if ($a === $b) {
echo "同じです";
}
変数$a
と変数$b
に「1」を代入しました。
if文で比較演算子を使って代入しています。
どちらも同じ数値(int)型の「1」なので、同じと判定されてtrueが返ってきます。
結果、上記のプログラムを実行すると、「同じです」が出力されて処理が終了します。
型まで参照するか、暗黙的に変換するか
上記のプログラムの比較演算子の「===
」は型まで比較します。
型まで比較しないイコールふたつの「==
」も存在します。
イコールふたつの場合には、型を相互変換した後で比較します。
例えば、下記のような場合はイコールが3つだと、falseです。
<?php
if (1 === "1") {
echo "同じ";
} else {
echo "違う";
}
この場合の結果は「違う」が出力されます。
ですが、イコールふたつの場合には、型が変換されるため挙動が変わります。
<?php
if (1 == "1") {
echo "同じ";
} else {
echo "違う";
}
この場合には、型が暗黙的に変換されて比べられるため、結果としてtrueが返ってきます。
そのため、上記では「同じ」が出力されます。
このようにイコールを3つ使うか、ふたつにするかで挙動が変わってくるので気をつけましょう。
基本的には、型も意識してイコール3つ使って比較するようにしておいた方が、バグを生みづらいのかなと思います。
PHPの比較演算子を使用したサンプルコード
イコール以外にも比較演算子があるので、それぞれの演算子を使ったサンプルコードを書いてみました。
両方の値が等しい
両方の値が等しいかを比べるイコール2つと、イコール3つの比較演算子です。
最初にイコール2つで比べて、次にイコール3つで比べています。
<?php
if (1 == "1") {
echo '1 == "1"はtrue'."\n";
} else {
echo '1 == "1"はfalse'."\n";
}
if (1 === "1") {
echo '1 === "1"はtrue'."\n";
} else {
echo '1 === "1"はfalse'."\n";
}
最初は数値の「1」と、文字列の「”1″」をイコール2つで比べています。
型変換されて比較するので、trueになります。
次も数値の「1」と、文字列の「”1″」を比べていますが、イコール3つにしています。
こうすると、型変換せずに比べるので、結果はfalseです。
出力結果は下記のようになります。
1 == "1"はtrue
1 === "1"はfalse
両方の値が等しくない
等しくないかを確認する時には3つの演算子を使うことができます。
「!=
」で、型変換した後に、左と右が等しくないかを確認します。
「<>
」も「!=
」と同じで、型変換した後の比較です。
「!==
」は型変換をせずに、左と右が等しくないかを確認します。
それぞれ等しくない場合にtrueになって、等しい場合にはfalseです。
<?php
if (7 != "7") {
echo '7 != "7"はtrue'."\n";
} else {
echo '7 != "7"はfalse'."\n";
}
if (7 <> "7") {
echo '7 <> "7"はtrue'."\n";
} else {
echo '7 <> "7"はfalse'."\n";
}
if (7 !== "7") {
echo '7 !== "7"はtrue'."\n";
} else {
echo '7 !== "7"はfalse'."\n";
}
最初に「!=
」で等しくないか確認しています。
数値の「7」と文字列の「”7″」を比較します。
型変換すると等しくなるので、falseになります。
次に「<>
」で等しくないか確認しています。
「!=
」と同じになるので、ここでもfalseになります。
最後に「!==
」で等しくないか比較しています。
「!==
」は型変換しないため、等しくないことになりtrueになります。
出力結果は下記のようになります。
7 != "7"はfalse
7 <> "7"はfalse
7 !== "7"はtrue
右より左が少ない
右より左が少ないか比較する時には「<
」を使います。
右の値と左の値を比較して、少ない場合にはtrueが返ってきます。
<?php
if (7 < 8) {
echo '7 < 8はtrue'."\n";
} else {
echo '7 < 8はfalse'."\n";
}
if (7 < 7) {
echo '7 < 7はtrue'."\n";
} else {
echo '7 < 7はfalse'."\n";
}
最初に数値の「7」と「8」を比較しています。
少ない値なので、trueになります。
次に数値の「7」と「7」を比較しています。
同じなので、falseになります。
出力結果は下記のようになります。
7 < 8はtrue
7 < 7はfalse
右より左が少ないか等しい
「右より左が少ない」または「等しい」か、を比較する時には「<=
」を使います。
右の値と左の値を比較して、少ないか等しい場合にtrueが返ってきます。
<?php
if (7 <= 8) {
echo '7 <= 8はtrue'."\n";
} else {
echo '7 <= 8はfalse'."\n";
}
if (7 <= 7) {
echo '7 <= 7はtrue'."\n";
} else {
echo '7 <= 7はfalse'."\n";
}
最初に数値の「7」と「8」を比較して、等しいか少ないかを確認しています。
少ない値なので、trueになります。
次に数値の「7」と「7」を比較しています。
同じなので、こちらもtrueになります。
出力結果は下記のようになります。
7 <= 8はtrue
7 <= 7はtrue
右より左が多い
右より左が多いか比較する時には「>
」を使います。
単純に先ほどの逆になります。
右の値と左の値を比較して、多い場合にはtrueが返ってきます。
<?php
if (12 > 11) {
echo '12 > 11はtrue'."\n";
} else {
echo '12 > 11はfalse'."\n";
}
if (12 > 12) {
echo '12 > 12はtrue'."\n";
} else {
echo '12 > 12はfalse'."\n";
}
最初に数値の「12」と「11」を比較しています。
右より左が多い値なので、trueになります。
次に数値の「12」と「12」を比較しています。
同じ値なので、比較が成り立たずにfalseになります。
出力結果は下記のようになります。
12 > 11はtrue
12 > 12はfalse
右より左が多いか等しい
「右より左が多い」または「等しい」か、を比較する時には「>=
」を使います。
右の値と左の値を比較して、多いか等しい場合にtrueが返ってきます。
<?php
if (12 >= 11) {
echo '12 > 11はtrue'."\n";
} else {
echo '12 > 11はfalse'."\n";
}
if (12 >= 12) {
echo '12 > 12はtrue'."\n";
} else {
echo '12 > 12はfalse'."\n";
}
最初に数値の「12」と「11」を比較して、多いか等しいかを確認します。
右より左が多い値なので、trueになります。
次に数値の「12」と「12」を比較しています。
同じ値なので、trueになります。
出力結果は下記のようになります。
12 > 11はtrue
12 > 12はtrue
宇宙船演算子
最後に宇宙船演算子です。
他の演算子はtrueとfalseを返しました。
宇宙船演算子は「-1」・「0」・「1」を返します。
右より左の値が少ない場合には「-1」です。
右と左の値が同じ場合には「0」です。
右より左の値が多い場合には「1」です。
<?php
$result1 = 10 <=> 30;
$result2 = 12 <=> 12;
$result3 = 12 <=> 7;
echo $result1."\n";
echo $result2."\n";
echo $result3."\n";
変数$result1に数値「10」と「30」を比較した結果を代入しています。
左の方が少ないので「-1」です。
変数$result2には数値の「12」と「12」を比較した結果を代入しています。
同じ値なので「0」が代入されます。
最後に変数$result3には数値の「12」と「7」を比較した結果を代入しています。
右の方が少ないので「1」になります。
PHPの比較演算子のまとめ
今回紹介した比較演算子を表にまとめてみました。
演算子 | 内容 | trueになるパターン |
---|---|---|
$v1 == $v2 | 型変換後に比較して、等しい場合にはtrueになる | 1 == “1” |
$v1 === $v2 | 型変換せずに比較して、等しい場合にはtrueになる | 1 === 1 |
$v1 != $v2 | 型変換後に比較して、等しくない場合にtrueになる | 1 != “2” |
$v1 <> $v2 | 型変換後に比較して、等しくない場合にtrueになる | 1 <> “2” |
$v1 !== $v2 | 型変換せずに比較して、等しくない場合にtrueになる | 1 !== “1” |
$v1 < $v2 | 右より左が少ないか比較する。少ない場合にtrueになる | 1 < 2 |
$v1 <= $v2 | 右より左が少ないか同じかを比較する。少ないか同じ場合にtrueになる | 1 <= 1 |
$v1 > $v2 | 右より左が多いか比較する。多い場合にtrueになる | 2 > 1 |
$v1 >= $v2 | 右より左が多いか同じかを比較する。多いか同じ場合にtrueになる | 1 >= 1 |
$v1 <=> $v2 | 右より左が少ない場合に「-1」・両方が同じ場合には「0」・右より左が多い場合に「1」 | 2 <=> 1 |
おわりに
今回はPHPの比較演算子について、サンプルコードを書いた後にまとめてみました。
型変換をする場合としない場合に注意が必要そうです、バグを生まないように比較する値の型に気をつけましょう。
コメント