PHP「”0x0A” == “10”はTRUEですがよろしいですか」
ぼく「えっ」
PHP「”0x0A” == “10”はTRUEになりますが」
ぼく「いえFALSEです」
PHP「えっ」
ぼく「えっ」
PHP「まだ比較したことがないということでしょうか」
ぼく「えっ」
PHP「えっ」
ぼく「変化するってことですか」
PHP「なにがですか」
ぼく「型が」
PHP「ああ文字列でも整数っぽい文字列なら自動で型変換されますよ」
ぼく「そうなんだすごい」
PHP「では比較いたしましょうかTRUEですよ」
ぼく「でも”0x0A”は明示的にキャストしたら0になりますよね」
PHP「えっ」
ぼく「えっ」
PHP「ああ16進数のことなら比較の場合のみ10進数に自動で変換してから比較するんですよ」
ぼく「なにそれこわい」
PHP「”0x0A” == “+000010.0000000000000001″の場合もTRUEになります」
ぼく「なにそれもこわい」
PHP「えっ」
ぼく「えっ」
解決法
・暗黙の型変換の癖を知って注意して使う
・もしくは文字列比較には === 演算子を使う
でも === 演算子を使うって動的型付けの言語として敗北じゃないのか?と思ったりしてしまう。
そういう意味で僕はPHPよりPythonが好きなのだけど。
参考リンク
[続] PHPで文字列比較を行う場合の注意と、一応数値も抑えておいたほうが・・・
PHPの文字列比較で気をつけるべきこと – 暗黙の型変換
プログラミングを勉強したい。まず何をすればいいの?