B3Sロゴ
menu close

PHP

値が異なるのに比較演算子「==」で比較するとtrueが戻る


ぽんて

公開日:2022/06/28


発生した現象

皆さんはvar_dumpで何が出力されるかわかるでしょうか。

 

正解は「こんばんは」です!

え??if内は「0 == ‘hoge’」で値が異なるから出力は「こんにちは」じゃないの?
と思われた方もいらっしゃると思います。

なぜこのような結果になるのでしょうか。

 

原因

PHPでは「’hoge’」を「(int)’hoge’」に変換し比較されていることが原因です。

「0 == ‘hoge’」は、次のような処理がPHP内部で行われています。
※あくまでイメージです。またPHPのverによっても異なります

  1.  0の型を確認 →int
  2.  ’hoge’の型を確認 →string
  3.  型が違うということは「0 === (int)’hoge’)」で比較だ! (1==’1’ならこれでうまくいく)
  4.   (int)’hoge’ → 0
  5.  「0 == ‘hoge’」 → 「0 === 0」
  6.  結果:0 == ‘hoge’はtrue

 

つまり「 0 == ‘hoge’」→「 0 === (int) ‘hoge’」→「 0 === 0」となり、クイズでのif文内はtureとなります。

 

結論

不要なバグを減らすために基本は「==」は使わず「===」を使っていきましょう!