今回のテーマは、その 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がコードを書ける時代だからこそ、こうした「違いを理解する力」が、コードを扱う上での基礎体力になります。
スポンサードリンク
