isset, empty, is_nullの違いと使い所

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であるか判定しています。

わくわくBank.
フリーランスのエンジニアとして活動してます。ここでは、ソフトウェア開発で必要とされる技術、用語、概念を整理しています。