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やってるわけじゃないんだからね!

スポンサーリンク
管理人

システムえんじにゃー🐈
趣味はエレキギターなど。作曲したい。
WoWs/プリコネ
記事に関する質問はお気軽にどうぞ。

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

コメント

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