私はいくつかのデータ解析コードで作業していましたが、私は次のことに出くわしました。奇妙なPHPの文字列整数比較と変換
$line = "100 something is amazingly cool";
$key = 100;
var_dump($line == $key);
まあ私たちのほとんどは、ダンプがfalse
を生み出すことを期待するが、私の驚きにダンプがtrue
でした!
私はPHPでそのような型変換があることを理解してください:
$x = 5 + "10 is a cool number"; // as documented on PHP manual
var_dump($x); // int(15) as documented.
しかし、なぜ、私は最初の例で説明した方法のような比較は、整数を文字列に変換するのではなく、整数への私の文字列を変換しないで。
は、私はあなたが私の例に===
厳密-比較を行うことができますことを理解して、私はちょうど知りたい:
- この動作に言及するPHPのドキュメントのいずれかの部分がありますか?
- 誰でもPHPで何が起こっているのか説明できますか?
- どのようにプログラマがこのような問題を防ぐことができますか?
==数値比較をしていると思いますが、それを数字に変換して数字に変換すると、数値で始まる場合はその数字が使用されます。おそらく、NaNのようなものを返さないならば。 – rubixibuc
私たちのほとんどはこれを期待しています....文字列を整数にキャストするとき(文字列と数値を比較するときに起こります)、PHPは最初に出現する数値以外の数字(この場合は100桁の数字と "何か")の間で停止します。 SO 100は結果値である。 –
http://stackoverflow.com/a/8672423を参照してください – Gumbo