型指定の無い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やってるわけじゃないんだからね!
コメント