初学者(自分)がよくハマるアレ。
まずは早見表で確認!
PHP 型の比較表
PHP isset, empty, is_null の違い早見表
動作の整理
上記を整理すると、
-
if($var)
と!empty($var)
-
isset($var)
と!is_null($var)
が等価となっていることがわかりました。
【追記↓】
isset()とempty()は未定義の変数でエラーを吐かないので、正確には対にはなっていません。
※コメント参照
⇒isset, empty, is_null の動作まとめ
【↑ここまで】
そして、if($var)
と isset($var)
で違いが出るのが、
$var | isset($var) | if($var) | |
---|---|---|---|
"" | 空文字 | TRUE | FALSE |
array() | 空の配列 | TRUE | FALSE |
false | 真偽値の偽 | TRUE | FALSE |
0 | 数値のゼロ | TRUE | FALSE |
"0" | 文字列のゼロ | TRUE | FALSE |
でした。
緩やかな比較で0は・・・
上述したPHPマニュアルの比較表を見ていると、
==
による緩やかな比較は腑に落ちない動きをしますね。
if(0=="") ⇒ TRUE
if("0"=="") ⇒ FALSE
これはまだしも、
if(0=="hoge") ⇒ TRUE
とは・・・??
特に理由がないならば===
を使うべき、と・・・。
ただ、switch
は緩やかな比較と聞いたことが・・・。
0を判定するなら
0 または "0" については、is_numeric($val)
なんですかね。
$val | is_numeric($val) |
---|---|
0 | TRUE |
"0" | TRUE |
"" | FALSE |