isset()
, is_null()
, empty()
の違い
以下、比較してみた表
is_null() | !empty() | isset() | empty() | |
---|---|---|---|---|
$x = "" | FALSE | FALSE | TRUE | TRUE |
$x = "0" | FALSE | FALSE | TRUE | TRUE |
$x = 0 | FALSE | FALSE | TRUE | TRUE |
$x = 1 | FALSE | TRUE | TRUE | FALSE |
$x = NULL | TRUE | FALSE | FALSE | TRUE |
$x = FALSE | FALSE | FALSE | TRUE | TRUE |
$x = TRUE | FALSE | TRUE | TRUE | FALSE |
$x = array() | FALSE | FALSE | TRUE | TRUE |
未定義 $x | TRUE | FALSE | FALSE | TRUE |
で、未定義 $x
と is_null()
の組み合わせのみ Notice エラーが出る。
また if($x)
と直接変数を突っ込んだ場合の動作は !empty
と等しい…
というわけではなく 未定義の変数を突っ込んだ場合に Notice が出る。
ということは… if($x)
とするのはやめて if(!empty($x))
とすべき。
また、 if($x)
は if( (boolean) $x )
と同じ。
つまり if( $x ) === if( (boolean) $x ) ≒ if( !empty($x) )
is_null()
は! isset()
とほぼ等価。引数がNULL
であるときにTRUE
を返す。ただし未定義の変数はNULL
と解釈されるのでTRUE
となる(Notice
エラーがでる)empty()
は! (boolean)
とほぼ等価。未定義の変数をいれたときにNotice
エラーを出さない点が違う。引数が空、あるいは0
や 空文字,NULL
,FALSAE
, 配列の中身がないときにTRUE
を返す。isset()
は! is_null()
とほぼ等価。未定義の変数をいれたときにNotice
エラーを出さない点が違う。引数がNULL
または 未定義の変数 を入れたときにFALSE
を返す関数。
変数の理解
以下のリンクを読んでかなり分かったような。。