$hoge=="" と empty($hoge) の違い。

シェアする

ちょっと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)

気をつけないといけないですね。

Sponsored Link

シェアする

フォローする