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