ちょっとPHPで書かれたソースを眺めてて気になるところがあったのでメモ。
同じ条件文なのに、 $hoge == "" と empty($hoge) と二つのパターンがあったので軽く試してた。
$ php -r '$hoge = True; var_dump(($hoge == "") == empty($hoge));'
bool(true)
$ php -r '$hoge = False; var_dump(($hoge == "") == empty($hoge));'
bool(true)
$ php -r '$hoge = ""; var_dump(($hoge == "") == empty($hoge));'
bool(true)
$ php -r '$hoge = "0"; var_dump(($hoge == "") == empty($hoge));'
bool(false)
$ php -r '$hoge = "00"; var_dump(($hoge == "") == empty($hoge));'
bool(true)
$ php -r '$hoge = 0; var_dump(($hoge == "") == empty($hoge));'
bool(true)
$hoge = "0" の時のみ False が返ってくる・・・
$ php -r '$hoge = "0"; var_dump(empty($hoge));'
bool(true)
$ php -r '$hoge = "0"; var_dump($hoge == "");'
bool(false)
empty($hoge) と $hoge == "" で結果が違うね。
empty() の場合は "0" を空であると解釈するので True を返してくるが、 $hoge == "" では文字列同士の比較になるので False を返す。という事なのかな。
PHP: empty - Manual を見る限りではそんな感じか。
他のパターンは同じ結果が返る。
$ php -r '$hoge = "00"; var_dump(empty($hoge));'
bool(false)
$ php -r '$hoge = "00"; var_dump($hoge == "");'
bool(false)
$ php -r '$hoge = ""; var_dump(empty($hoge));'
bool(true)
$ php -r '$hoge = ""; var_dump($hoge=="");'
bool(true)
$ php -r '$hoge = True; var_dump(empty($hoge));'
bool(false)
$ php -r '$hoge = True; var_dump($hoge == "");'
bool(false)
$ php -r '$hoge = False; var_dump(empty($hoge));'
bool(true)
$ php -r '$hoge = False; var_dump($hoge == "");'
bool(true)
$ php -r '$hoge = 0; var_dump(empty($hoge));'
bool(true)
$ php -r '$hoge = 0; var_dump($hoge == "");'
bool(true)
気をつけないといけないですね。
コメント