開発したアプリなど一覧

$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

コメント

タイトルとURLをコピーしました