FC2ブログ
2009
06.22

PHP の == についてやっと理解できた・・のか?

前のエントリで

var_dump("0" == "0x"); は false なのに、
var_dump("10" == "0x0a"); は true なのか?


がわからんと叫んでいたのですが、
数値で比較するか、文字列で比較するかは、is_numeric を使って判定しているそうです。

"10" == "0x0a" 数値と数値になるので、数値というか整数として判定
"0" == "0x" 数値と文字列になるので、文字列として判定

==で文字列同士を数値として比較する条件

PHPの==演算子は両辺が文字列同士の場合に、両辺ともis_numeric()がtrueになるような文字列だった場合には数値として比較し、それ以外なら文字列として比較します。



ということは、
文字列 == 数値
の場合は、strtod を使って文字列を数値にして比較、という理解でいいのでしょうか?
そうだとすると、全てすっきりします。

var_dump(0 == NULL);
bool(true)
文字列ではない同士なのでそのまま比較

var_dump("0" == NULL);
bool(false)
文字列と NULL文字を比較

var_dump("NULL" == 0);
bool(true)
"NULL" を strtod するとエラーになるので、0 が返るため同じになる。

var_dump("NULL" == "0");
bool(false)
"NULL" はis_numeric の結果が false なので、文字列 == 文字列 として判定される。

ということで、矛盾はないでしょうか?

スポンサーサイト




トラックバックURL
http://noriko3.blog42.fc2.com/tb.php/221-7637ea36
トラックバック
コメント
http://bakera.jp/ebi/topic/3634

ということで、あってるらしいです。
くにたけdot 2009.06.22 20:01 | 編集
そのページは実は見てたり・・
strtodの実装だけで決まっていなかったようなので、
疑問に思ってしまったのです。
文字列と文字列の場合に、is_numeric を通すというのに気づかなくて、うーんと思ってしまってたしだいですが、
このエントリからじゃわからない気がしてきた不具合orz
紀子さんdot 2009.06.22 20:19 | 編集
管理者にだけ表示を許可する
 
back-to-top