暗黙の型変換
2007/05/17
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は数値の比較も文字列の比較も、==で行なうのが普通だから問題ってことですかね?