第08回: 比較演算子 — `==` と `===` の違いで防げるバグがある

章: 第1章: 文法の土台

0 == falsetrue になる——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() の戻り値は 0false を返すため、=== false で判定しないと誤動作します。

まとめ & 次のステップ

  • == は型変換あり、=== は型まで含めた厳密比較
  • 実務では基本的に === を使うほうが安全
  • strpos() 等の関数は 0false を返し分けるため === が必須
  • < > <= >= で大小比較、<=> で三方比較(PHP 7以降)
  • null 0 '' false== で混同しやすいので注意

次回は 論理演算子(AND・OR・NOT)を学びます。複数の条件を組み合わせる技術を習得しましょう。

Related Articles