Blogブログ

PHP if文の比較演算子について

こんにちは。HappyLifeCreatorsサポート担当の大谷です。

今日のテーマはこちら、

PHP if文の比較演算子について

です。

これだけじゃ何のことかわかりませんよね。

$a = 0;
if( $a == “”) {
}

このif文、trueと判断されるか、falseと判断されるか。
予想がついた方はもう読まなくても大丈夫かもしれません。
1行目で変数$aへは0が代入され、2行目のif文では中身は””か確認しています。
そら中身は0なんだからfalseでしょ・・・と思ってしまいます。

答えはtrueです。

では

$a = 0;
if( $a === “”) {
}

これはどうでしょうか。
先ほどと比較演算子==が===に変わっただけです。

答えはfalseです。

ほぼ同じif文ですが、このように結果が変わってしまいます。
慣れた方には当たり前かも知れませんが、知らなければ思わぬつまづきをしてしまいます。

そんなわけで、if文にて比較演算子と値で、どのように判定されるのか、調べてみました。

1.変数$aの中身がNULLの時

結果
if($a == NULL) true
if($a == “”) true
if($a == 0) true
if($a === NULL) true
($a === “”) false
($a === 0) false

2.変数$aの中身が“”の時

結果
if($a == NULL) true
if($a == “”) true
if($a == 0) true
if($a === NULL) false
($a === “”) true
($a === 0) false

3.変数$aの中身が0の時

結果
if($a == NULL) true
if($a == “”) true
if($a == 0) true
if($a === NULL) false
($a === “”) false
($a === 0) true

 

==の場合は気のいいあんちゃんの如く、人類みな兄弟くらいの感じで何が来ようがお構いなしに(と言っては言い過ぎですが)trueで受け入れてくれます。
有り難くない場合もありますが・・・。

対して===の場合は鋭い目つきで不正を見逃さない検査官といった感じで、些細な違いも見逃さず、判定してくれます。

私自身、PHP初心者で、先日みごとにひっかかりました。
見つけた時はなんじゃ?と思いましたが、===という比較演算子、データ型まで含めた一致と理解してましたが、こういう違いもあるのねと教訓にしましたので、今回ご紹介させていただきました。

それではまた!

大谷

執筆者

Developer

大谷