2つの値を比較して、大きい、小さい、等しい、等しくないなど、両者を比較する演算子です。
例えば、if文などの条件分岐で「年齢が20歳以上だったら「成人」と表示させる」というような判定をする場合によく用いられます。
ただ、型を意識しないと、思わぬところでハマってしまうこともあるため、==
と===
を使い分けてスピーディにコーディングしていきましょう。
目次
比較演算子一覧
比較演算子の一覧です。
演算子 | サンプル | 説明 |
---|---|---|
== | a == b | aとbは同じ値 |
!= | a != b | aとbは違う値 |
<> | a <> b | aとbは違う値 |
> | a > b | bよりaが大きい |
>= | a >= b | aはb以上 (bよりaが大きいか同じ) |
< | a < b | aよりbが大きい |
<= | a <= b | bはa以上 (aよりbが大きいか同じ) |
=== | a === b | aとbは同じ値 (型も含めた厳密な比較) |
!== | a !== b | aとbは違う値 (型も含めた厳密な比較) |
比較演算子の使い方
if文で「成人」か「未成年」かを表示させる。
変数$age
に格納された年齢を元に、if文で比較演算子を使い、20以上か未満かを判定する。
1 2 3 4 5 6 7 |
$age = 21; if($age >= 20) { echo '「成人」'; } else { echo '「未成年」'; } |
以下のように表示される
「成人」
該当のユーザーと合致した場合にのみ「ようこそ!!」と表示させる
変数$user
に格納された名前が、if文で指定された名前と合致するかを判定する。
1 2 3 4 5 6 7 |
$user = '田中かなた'; if($user == '田中かなた') { echo '「ようこそ!!」'; } else { echo '「ユーザー名が誤っています。」'; } |
以下のように表示される
「ようこそ!!」
PHPの型変換により、FALSEのはずがTRUE判定に!!
「19歳」と「19」を比較したら、以下のように「同じ」と判定されてしまいます。
なぜでしょう?
1 2 3 4 5 6 7 |
$age = 19; if('19歳' == $age){ echo '同じです。'; } else { echo '違います。'; } |
同じです。
PHPの文字列型と数値型の比較は、自動変換により両者とも数値型に揃えられる
PHPでは型を自動変換してくれたりと何かと融通が効く言語ですが、型を意識しないとハマってしまうこともしばしばです。
上記の例だと、「19歳」という文字列型と「19」という数値型の比較になります。
この場合、文字列型は数値型に変換され、同じ型で比較しようとします。
文字列型の「19歳」は数値型に自動変換されるため、「19」となります。
結果、19 == 19
ということで、true
(同じだよ!)と判定されてしまうのです。
厳密な比較演算子で型まで比較しよう
上記の例で誤った結果とならないためには、型まで含めて比較する必要があります。
厳密な比較をしてくれる===
で型まで含めて比較してやることで、自動変換を防ぎます。
1 2 3 4 5 6 7 |
$age = 19; if('19歳' === $age){ echo '同じです。'; } else { echo '違います。'; } |
違います。
PHPは気の利く言語です。
型なんか意識しなくても、すいすいコーディングできますが、裏ではこういう変換などでスムーズに作業できるように考えられているんですね。
それだけに、型を意識することを忘れてしまいがちです。
しかし上記のような例や、日付を扱うときなど、型を意識したコードを書かないと思わぬところでハマってしまいます。
型を意識したコーディングに取り組みたいものですね。
>bはa以上
>(bよりaが大きいか同じ)
aよりbが大きいか同じ
ではないでしょうか?
adminさん
>aよりbが大きいか同じ
>ではないでしょうか?
確かにその通りですね。
訂正させていただきました。
ご指摘ありがとうございます。