PHPの文字列と数値の比較であせった 
2015/06/04 Thu.
プログラムを組んでテストする際、絶対エラーが出るデータを入力したらエラーがでず、調べたらPHPの仕様上のことなので今更ながらあせったメモ。
どういうことかと言うと、文字列と数値の比較で、意図しない結果が出ることがあるということ。
今回の例。
$a = 123 ←DBの数値項目から取得
$b = '123a' ←フォームからの入力
var_dump($a == $b);
の場合、FALSEになると思ったらTRUEが返ってきた。
これはPHPの仕様で、数値と文字列の比較の場合、文字列を無理やり数値に内部変換しているため。
つまり、比較の部分では
123 == 123
で比較しているってこと。
なので、片方が文字列型になる場合は、比較項目を明示的に「文字列型」と宣言しないとダメですね。
if ((string) $a == (string) $b) { }
この様に両方文字型と宣言するようにしたほうが良いかもね。
こちらも参考にどうぞ。
PHPの文字列と数値の比較であせった パート2
今回の例。
$a = 123 ←DBの数値項目から取得
$b = '123a' ←フォームからの入力
var_dump($a == $b);
の場合、FALSEになると思ったらTRUEが返ってきた。
これはPHPの仕様で、数値と文字列の比較の場合、文字列を無理やり数値に内部変換しているため。
つまり、比較の部分では
123 == 123
で比較しているってこと。
なので、片方が文字列型になる場合は、比較項目を明示的に「文字列型」と宣言しないとダメですね。
if ((string) $a == (string) $b) { }
この様に両方文字型と宣言するようにしたほうが良いかもね。
こちらも参考にどうぞ。
PHPの文字列と数値の比較であせった パート2
- 関連記事
category: PHP
この記事へのコメント
コメントの投稿
コメントは全て管理人が内容を確認してから表示されます(非公開コメント除く)。
内容によっては表示されない場合がありますことご了承願います。
内容によっては表示されない場合がありますことご了承願います。