章: 第1章: 文法の土台
0 == false が true になる——PHPを始めた人が最初に驚く挙動です
PHPには「型を無視して比較する ==」と「型まで含めて比較する ===」の2種類があります。この違いを知らずに == だけ使っていると、思わぬ誤判定でバグが発生します。比較演算子を正しく使えると、条件分岐の精度が大幅に上がります。
まずコードを動かしてみる
<?php
$a = '10';
$b = 10;
var_dump($a == $b);
var_dump($a === $b);
== は型を変換して比較するため true、=== は型も含めて比較するため false になります。
== と === の比較
| 演算子 | 型変換 | 使う場面 |
== |
する | 型が違っても値が同じなら一致とみなしたいとき |
=== |
しない | 型も含めて厳密に一致を確認したいとき(推奨) |
!= |
する | 緩やかな不一致 |
!== |
しない | 厳密な不一致 |
危険な == 比較の例
<?php
var_dump(0 == false); // true ← 意図しない一致
var_dump('' == false); // true ← 空文字もfalseと一致
var_dump('0' == false); // true ← 文字列の'0'もfalseと一致
var_dump(null == false); // true ← nullもfalseと一致
安全な === 比較の例
<?php
var_dump(0 === false); // false ← 型が違うので不一致
var_dump('' === false); // false ← 正しく区別できる
var_dump('0' === false); // false ← 文字列と真偽値を区別できる
チェックポイント: 基本的には
===を使う習慣をつけましょう。特にstrpos()やarray_search()の戻り値は0やfalseを返すため、=== falseで判定しないと誤動作します。
まとめ & 次のステップ
==は型変換あり、===は型まで含めた厳密比較- 実務では基本的に
===を使うほうが安全 strpos()等の関数は0とfalseを返し分けるため===が必須<><=>=で大小比較、<=>で三方比較(PHP 7以降)null0''falseは==で混同しやすいので注意
次回は 論理演算子(AND・OR・NOT)を学びます。複数の条件を組み合わせる技術を習得しましょう。