- ベストアンサー
仕様ならしようがない(洒落)
$a = 0; if ($a == "hoge"){ echo "a"; } elseif($a == 0) { echo "b"; } else { echo "c"; } //----- true,falseならcを吐きそうだし。 なぜでしょうか。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
さらにこういう話もあったり。 PHPで==の代わりにstrcmp関数を使うことによる問題点 - hnwの日記 http://d.hatena.ne.jp/hnw/20090123
その他の回答 (4)
- hrm_mmm
- ベストアンサー率63% (292/459)
>phpて融通利く言語だと思ってた 融通効かせて、文字列を数値に自動変換して比較するから、0 == "数字以外文字列何でも" や "1半角数字から"==1 はtrue になっちゃうんです。 strcmp() は逆に、数値を文字列に自動変換して、思わぬ結果になったりする。 phpもperlもJavaScriptも、一つの変数にどんな型のデータでも代入できる代わりに、その文脈で(数値判定するか文字列として必要かで)結果が変わってくるので、融通の法則(自動変換の法則)を覚えないと正しい結果を得られません。 phpでの変換の法則はマニュアル参照 http://jp.php.net/manual/ja/language.types.string.php#language.types.string.conversion いずれにしても、型を区別して比較するなら、===とか!==かで、数値を文字列に直すならsprintfでフォーマットをそろえるとかいろいろ方法はそろってます。
- mr_sick199
- ベストアンサー率25% (1/4)
これは。。。 3行目で、strcmp()で文字列比較してください。 参考はこれ。 http://logic.stepserver.jp/memo.cgi/archive/506/
お礼
さすがですねー。対応完了です。理解しました。
あ、ごめんなさい。PHPね http://logic.stepserver.jp/memo.cgi/archive/506/ を見てください
?? $a == "hoge" →false $a == 0 →true よって出力は「b」なのでは
お礼
説明に書いてないけどaが出力されます。
補足
そうならないと困るんですが、、 phpは5.1.6です。自分だけかな。
お礼
はうあっ -o-;) phpて融通利く言語だと思ってたけど、なんかイメージ変わりました。。 有意義なご回答どもでした!