isset, empty, is_nullの違いについて整理します。また、どういったケースで利用すればいいのかについて取り上げます。
目次
isset, empty, is_nullの動作
isset()
変数がセットされており、それが NULL でないことを調べます。
is_null() と反対の結果を返します。
empty()
変数が空(空文字
0
NULL
FALSE
空の配列
)だったらTRUE
それ以外はFALSE
を返します。
is_null()
変数が NULL かどうか調べます。変数が NULL なら TRUE
、それ以外は FALSE
を返します。
変数が未定義の時も TRUE
を返しますが、未定義のチェックは isset() を使ったほうが良いと思います。
違いを整理
それぞれ判定結果は以下のようになります。
関数 | 未定義 | NULL | 0 | “”(空文字) | “abc” |
---|---|---|---|---|---|
isset | False | False | True | True | True |
empty | True | True | True | True | False |
is_null | True(Notice) | True | False | False | False |
変数を宣言したが値を設定してない場合はNULLとなります。
$var;
var_dump($var); // NULL
ですが、Notice: Undefined variable
といった警告がでます。
下記のように明示的にNULLを設定するほうが望ましいです。
$var = NULL;
var_dump($var); // NULL
使い所
isset
$params = parse_url($url);
if (isset($params['query'])) {
parse_str($params['query']);
}
任意のキーで連想配列が存在するか判定しています。
if (isset($_POST['XXXXX'])) {
$xxxxx = $_POST['XXXXX'];
}
任意の文字列のPOSTを受けとっているか判定しています。
empty
$sql = "SELECT * FROM table";
if(!empty($cond)) {
$sql = $sql . " WHERE " . $cond;
}
文字(空文字と0を除く)が設定されているか判定しています。
is_null
function funcXXXX($value = null) {
if (!is_null($value)) {
$value = funcYYYY($value);
}
return is_null($value);
}
関数の引数値をデフォルトでNULLとしています。
引数がセットされているかどうかをis_nullで判定してます。
$result = funcZZZZ();
if (is_null($diff)) {
}
関数の戻り値がNULLであるか判定しています。