前の記事でも似たようなことを書いたけど、再度確認。
前の記事:
【PHP】 == と === の違い
==と===とstrcmp
前回は==と===の違いだけだったけど、さらにstrcmpを追加する。
== | 値が等しい場合、TRUE |
---|---|
=== | 値と型が等しい場合、TRUE |
strcmp | int strcmp ( string $str1 , string $str2 ) str1 が str2 よりも小さければ < 0 を、str1が str2よりも大きければ > 0 を、 等しければ 0 を返す。 |
動作の違い
==での比較の場合、型を意識しないが、内部では型変換が行われている。
なので以下の場合だとおかしな挙動をする。
1 == "1a" : TRUE
1 === "1a" : FALSE
“1a”が比較時に型変換され、数値の1と同じになる。
結果、成立してしまう。
なので厳密な文字列比較の場合であれば、===、またはstrcmp(A, B) === 0でないといけない。
さらにはstrcmpの場合、オーバーヘッドが発生するので、特別な理由がなければ===を使うのが基本で良さそうだ。