【PHP初心者】比較演算子の違いをわかりやすく|== と === の正しい使い方と注意点

副業 初心者

今回のテーマは、その if文 の中で使う「比較演算子」です。PHPでは、値を比べるときに「==」や「===」などの記号を使いますが、実はこの2つ、見た目は似ていても、結果がまったく違うことがあります。

この違いを理解していないと、「条件が正しいはずなのに動かない」「なぜか全部同じ結果になる」といった問題に必ずぶつかります。

この記事では、前回と同じフォーム構成を使いながら、「php 比較演算子 違い」「php == === 違い わかりやすく」といったキーワードで検索される疑問を、実際のコードと出力例を交えて解説します。

前回の記事を読み直す場合はこちらをご覧ください

比較演算子とは何か

まず「比較演算子」というのは、2つの値を比べるための記号です。
if文の条件式の中で「どんな場合に真(true)として処理を実行するか」を判定します。

phpの比較演算子の違いとして、代表的なものを整理しておきましょう。

演算子 意味 説明
== 等しい $a == $b 値が等しいときに真(型は無視)
=== 厳密に等しい $a === $b 値と型が両方等しいときに真
!= 等しくない $a != $b 値が異なるときに真
!== 厳密に等しくない $a !== $b 値または型が異なるときに真
> より大きい $a > $b aがbより大きい
< より小さい $a < $b aがbより小さい
>= 以上 $a >= $b aがb以上
<= 以下 $a <= $b aがb以下

 
ここまでは多くの入門書にも載っています。

しかし、「== と === の違い」「文字と数値の比較」「空文字の扱い」などは、php 初心者が最も混乱しやすい部分です。
 
 
 

実際に使う場面

前回の記事同様、素材選択フォームを例にして素材を選択します。
フォーム
 

  
  

(※表示はされません。)
 

<form method="post">
  <select name="material1">
    <option value="">選択して下さい</option>
    <option value="シルク">シルク</option>
    <option value="コットン">コットン</option>
    <option value="ウール">ウール</option>
    <option value="リネン">リネン</option>
  </select>
  <input type="submit" value="表示する">
</form>

 
送信された値は $_POST[“material1”] に入ります。
では、function.php でそれを受け取り、if文で判定してみます。
 
 
 

== と === の違いを実感する

次の2つのコードを比べてください。

① 「==」を使った場合

function material_func() {
    $material1 = $_POST["material1"];
    if($material1 == "シルク"){
        echo "このネクタイの生地はシルクです。";
    } else {
        echo "シルクではありません。";
    }
}
add_shortcode('printmaterial', 'material_func');

 
② 「===」を使った場合

function material_func() {
    $material1 = $_POST["material1"];
    if($material1 === "シルク"){
        echo "このネクタイの生地はシルクです。";
    } else {
        echo "シルクではありません。";
    }
}
add_shortcode('printmaterial', 'material_func');

 
両方同じ結果に見えますが、内部的には違います。
PHPは == で比較すると、文字列と数値など 型が違う値を自動的に変換して比べる からです。
 
 

型が違うと何が起こるか

たとえば次のようなコードを考えてみましょう。この数値の比較は文字とは違い、分かりやすいと思います。

$a = "10";
$b = 10;

if ($a == $b) {
    echo "== は真です";
}

if ($a === $b) {
    echo "=== は真です";
}

 
この結果は次のようになります。

== は真です

 
だけが出力され、=== の方は実行されません。
なぜかというと:

・$a は「文字列」 “10”
・$b は「数値」 10
・== は型を無視して値を比較するので「同じ」と判断
・=== は型も比べるため「文字と数値は違う」と判断

この「型の違い」を無視してしまうことが、初心者がよくハマる原因です。
 
 
 

条件分岐における落とし穴

WordPress のフォーム処理などでは、POSTデータはすべて文字列として送信されます。
つまり $_POST[“material1”] の中身も文字列です。

そのため、比較対象が数値である場合、意図せず条件が真になってしまうことがあります。

$number = $_POST["number"]; // たとえばフォームから "0" が送られる
if ($number == false) {
    echo "false とみなされました。";
}

 
“0” は数値に変換すると 0 なので、PHPはこれを false と判断します。こうした自動型変換を「ゆるい比較」と呼びます。

if文の中で「==」を使うと、こうした予期せぬ変換が起こるため、厳密な比較を行う === を使うのが基本です。
 
 
 

文字と数値を比較する時の考え方

もう少し例を出しましょう。
 

if ("5文字" == 5) { echo "真"; }

 
この場合も「真」と判定されます。
なぜなら、PHPは左の “5文字” を数値に変換し、「5 == 5」として判断しているからです。

同様に、

if ("シルク" == 0) { echo "真"; }

 
 
これも真と判定されます。
PHPは「シルク」を数値に変換できないため、0として扱うためです。

このように「==」は一見便利ですが、人間の感覚とズレた結果を返すことがあるのです。
 
 
 

 

実際のWordPressカスタマイズでどう使うか

WordPressでカスタマイズを行う場合、if文で条件を分ける場面は非常に多いです。
・特定のページだけスタイルを変える
・投稿タイプによって処理を切り替える
・フォームの送信内容によって出力を変える

このとき、「比較演算子の違い」を理解しているかどうかで、動作が安定するかどうかが決まります。

フォームから送信される値はすべて文字列なので、「===」を使って厳密に比較しておくことが、トラブルを防ぐコツです。
 

if ($material1 === "ウール") {
    echo "ウール素材の説明を表示します。";
}

 
こう書けば、意図せず数値変換されることもなく、確実に文字列として比較されます。
 
 
 

!= と !== の違いにも注意

!= と !== は逆の判定として、等しくない場合の処理を行います。このときも同じ考え方です。

$a = "10";
$b = 10;

if ($a != $b) { echo "異なる"; }   // 型を無視する
if ($a !== $b) { echo "厳密に異なる"; } // 型まで判定する

出力結果は、

厳密に異なる

 
となります。
つまり、!== は「型が違っても異なる」と判断します。
 
 

PHP 初心者がやりがちな誤解

「=」と「==」を混同する

・= は代入演算子。「右の値を左に入れる」
・== は比較演算子。「右と左を比べる」
 
 
if文の中で if($a = “シルク”) と書いてしまうと、「代入」になってしまい常に真になります。
 
 
「===」を知らないまま使っていない
多くの入門記事では == しか紹介されないため、WordPressのカスタマイズでデータが一致しないトラブルを起こしやすい。
 
 
 

まとめ|比較演算子を理解することがカスタマイズの第一歩

演算子 意味 推奨度
== 値だけを比較(型は無視) △(注意が必要)
=== 値と型の両方を比較 ◎(推奨)
!= 値が異なるか比較
!== 型も含めて異なるか比較 ◎(推奨)

PHP初心者がWordPressカスタマイズを行う上で、if文を理解した次の段階が「比較演算子の理解」です。

比較演算子を正しく使い分けることで、「なぜか条件が合わない」「全部同じ出力になる」といった初歩的なミスを防ぐことができます。

AIがコードを書ける時代だからこそ、こうした「違いを理解する力」が、コードを扱う上での基礎体力になります。
 
 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です