PHPの比較演算子「==」と「===」の違いを徹底解説!

こんにちは!今回はPHPでよく混乱しがちな比較演算子「==」と「===」の違いについて、わかりやすく解説します。

「==」と「===」の基本的な違い

PHPには2種類の等価比較演算子があります:

  • 「==」: 値が同じかを比較(型変換あり)
  • 「===」: 値と型が両方同じかを比較(型変換なし)

この違いを簡単に言うと:

  • 「==」は「だいたい同じ」
  • 「===」は「完全に同じ」
PHPの「==」演算子:ゆるい比較(型変換あり) 値が同じなら型が違っても true を返す $a = 5 (integer) $b = “5” (string) == PHP内部で型変換が行われる var_dump($a == $b); → true PHP: if (5 == “5”) { echo “true”; } // “true” が出力される
PHPの「===」演算子:厳密な比較(型変換なし) 値と型の両方が同じでないと false を返す $a = 5 (integer) $b = “5” (string) === 値と型の両方を厳密に比較 var_dump($a === $b); → false PHP: if (5 === “5”) { echo “true”; } else { echo “false”; } // “false” が出力される

わかりやすい例で見てみよう

$a = 5;      // 整数
$b = "5";    // 文字列

// ==(ゆるい比較)
var_dump($a == $b);   // bool(true) - 中身は同じだからOK!

// ===(厳密な比較)
var_dump($a === $b);  // bool(false) - 型が違うからNG!

「5」と「”5″」は「==」では同じですが、「===」では違うものとして扱われます。

配列の比較

配列を比較する場合も大きな違いがあります:

$array1 = [1, 2, 3];
$array2 = [1, 2, 3]; 
$array3 = ["1", "2", "3"];

// 同じ値の配列の比較
var_dump($array1 == $array2);   // bool(true)
var_dump($array1 === $array2);  // bool(true)

// 型が異なる配列の比較
var_dump($array1 == $array3);   // bool(true) - 値が同じと判断
var_dump($array1 === $array3);  // bool(false) - 型が違うのでfalse

配列の場合、「==」は各要素の値だけを比較しますが、「===」は値と型の両方を比較します。

PHPの配列比較: ==と===の違い $array1 = [1, 2, 3] 1 (int) 2 (int) 3 (int) $array2 = [“1”, “2”, “3”] “1” (string) “2” (string) “3” (string) == 比較 (ゆるい比較) var_dump($array1 == $array2); // bool(true) 値が同じなら型が違っても true を返す === 比較 (厳密な比較) var_dump($array1 === $array2); // bool(false) 型が違うので false を返す 配列の比較でも、===は値と型の両方が同じでないとfalseになります

「!=」と「!==」も同じ考え方

否定の場合も同様です:

  • 「!=」: 値が異なるかを比較(型変換あり)
  • 「!==」: 値または型のどちらかが異なるかを比較(型変換なし)
$a = 0;
$b = "";

var_dump($a != $b);   // bool(false) - 型変換するとどちらも「空」なので同じと判断
var_dump($a !== $b);  // bool(true) - 型が違うので異なると判断

どっちを使えばいいの?

基本的には「===」を使うことをおすすめします!理由は:

  1. 予想外の動作を防げる
  2. コードがより安全になる
  3. 意図が明確になる

特に以下のような場合は「===」が必須です:

  • null値の確認
  • 真偽値(true/false)のチェック
  • 「0」と空文字列などを区別する必要がある場合
// これはNG(バグの元)
if ($value == null) { ... }

// これがOK
if ($value === null) { ... }

if文の条件で関数を実行する短絡評価

ちなみにPHPのif文の条件部分に関数がある場合、その関数は実際に実行されます。

function checkUser() {
    echo "ユーザーをチェックしました";
    return true;
}

if (checkUser() && doSomething()) {
    // ...
}

この場合、「checkUser()」は必ず実行され、その戻り値がtrueなら「doSomething()」も実行されます。これを短絡評価と言います。

この特性を利用すると、こんな書き方もできます:

// ユーザーが管理者なら処理を実行
$user && $user->isAdmin() && performAdminAction();

まとめ

  • 「==」は値だけを比較(型変換あり)
  • 「===」は値と型の両方を比較(型変換なし)
  • 基本的には「===」を使おう
  • 配列の比較でも同じルールが適用される
  • 意図的に型変換を利用したい場合のみ「==」を使おう

安全で予測可能なコードを書くために、基本は「===」を使うクセをつけましょう!これでPHPの比較演算子をマスターできたはずです。

この記事を書いた人