暗黙の型変換

phpはほとんど知らないんですが。

0はfalseでNULLで、それ以外のすべての値はtrueで。

“2a”は2になって、以下略。

http://d.hatena.ne.jp/gallu/20070516/p1

phpの暗黙変換の動作はperlから来ていると推測できます。

#!/usr/bin/perl
print qq(1| 2 == "2a"\n) if 2 == "2a";
print qq(2| 0 == "a2"\n) if 0 == "a2";
print qq(3| 2 != "a2"\n) if 2 != "a2";
print qq(4| 0 ne "0a"\n) if 0 ne "0a";
print qq(5| 0 eq "0"\n) if 0 eq "0";

実行結果

1| 2 == "2a"
2| 0 == "a2"
3| 2 != "a2"
4| 0 ne "0a"
5| 0 eq "0"

perlであまり問題視されていないのは、「文字列比較はeq neだろ?」という常識があるからだと思う。

整数値を文字列と比較する際、文字列が 数値に変換されます。 数値形式の文字列を比較する場合、それは整数として比較されます。これらの ルールは、 switch 文にも適用されます。

http://zapanet.info/phpdoc/language.operators.comparison.html

PHPは数値の比較も文字列の比較も、==で行なうのが普通だから問題ってことですかね?

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です


reCaptcha の認証期間が終了しました。ページを再読み込みしてください。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください