PHP

ゼロと空文字

型指定の無いPHPはときどき値の比較でどんな答えが返ってくるのか悩むときがあります。
ちょっと試してみた。

$zero = 0;
var_dump (
    $zero == "",
    $zero === "",
    strcmp($zero, "") == 0,
    empty($zero),
    is_bool($zero),
    $zero == FALSE,
    $zero === FALSE
);

上記のコードを実行してみると以下のような結果になります。

bool(true)
bool(false)
bool(false)
bool(true)
bool(false)
bool(true)
bool(false)

これらを踏まえておかないと比較によるif分岐で思いも寄らないことに。

$hoge = 0;

if ($hoge != "") {
    echo '$hoge にはなんか入ってます。';
} else {
    echo '$hoge にはなにも入っていないようです。';
}

とか

$hoge = 0;

if (!empty($hoge)) {
    echo '$hoge にはなんか入ってます。';
} else {
    echo '$hoge にはなにも入っていないようです。';
}

あれ、どっちも、偽になっちゃう、よ?
ということで、$hogeには何か代入されていて、かつ空文字ではないというのを調べたいなら、

$hoge = 0;

if (!is_null($hoge) && ($hoge !== "")) {
    echo '$hoge にはなんか入ってます。';
} else {
    echo '$hoge にはなにも入っていないようです。';
}

こうしましょう。
これだからPHPは手が焼ける。
勘違いしないで、別に好きでPHPやってるわけじゃないんだからね!

スポンサーリンク
記事を書いた人

システムえんじにゃー🐈
趣味はエレキギター、自転車など。作曲したい。
World of Warshipsやってます。
記事に関する質問はお気軽にどうぞ。

surface0 (さーふぇす)をフォローする

コメント

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