PHPのisset・empty・is_nullの違いを理解しよう
はじめに
PHPには、変数の状態を確認するための関数がいくつかありますが、その代表的な関数としてisset・empty・is_nullがあります。これらの関数は似ているようで、実はそれぞれ異なる挙動をします。
まずそれぞれの関数の比較表をご紹介した後、それぞれの関数について詳しく解説します。
isset・empty・is_nullの比較表
isset・empty・is_null、それぞれの関数に該当の値をセットすると、次の結果が返却されます。
値 | 型 | isset | empty | is_null | if ($var) |
---|---|---|---|---|---|
$var = 1 | int | true | false | false | true |
$var = "1" | string | true | false | false | true |
$var = "" | string | true | true | false | false |
$var(未定義) | NULL | false | true | true | false |
$var = 0 | int | true | true | false | false |
$var = null | NULL | false | true | true | false |
$var = [ ] | array | true | true | false | false |
$var = ['a', 'b'] | array | true | false | false | true |
それぞれの関数の挙動
それでは関数ごとに詳しくみてみましょう。
isset
isset関数は、変数がセット(宣言)されていて、かつNULLでない場合にtrueを返します。
ポイントは、「変数がセット(宣言)されている」かどうかです。
例えば、$varが未定義の場合、
// $varが未定義
var_dump(isset($var)); // false
変数がセットされていないので、falseが返却されます。
またnullがセットされている場合、
$var = null;
var_dump(isset($var)); // false
同じくfalseが返却され、これ以外はtrueが返却されます。
empty
empty関数は、変数が空であるかどうかを確認します。変数がnull、0、空文字、空配列などの場合にtrueとなります。
ポイントは、「変数が空であるか」どうかです。
empty関数でtrueになる例を見てみましょう。
$var = '';
var_dump(empty($var)); // true
$var = 0;
var_dump(empty($var)); // true
$var = null;
var_dump(empty($var)); // true
$var = [];
var_dump(empty($var)); // true
// $var2が未定義
var_dump(empty($var2)); // true
上記以外の場合は、falseが返却されます。
is_null
is_null関数は、変数がnullである場合にtrueを返します。
ポイントは、その名の通り、「nullであるか(もしくは未定義か)」どうかです。
$var = null;
var_dump(is_null($var)); // true
// $var2が未定義
var_dump(empty($var2)); // true
上記以外の場合は、falseが返却されます。
注意点(未定義の変数)
最後にもう一歩踏み込んで、未定義の変数を扱う際の注意点をお伝えします。
上記の比較表を見ると、issetとis_nullは正反対の判定をしているように見えます。
しかし、is_nullは未定義の変数に対して使用すると、前述した通りtrueを返却すると同時に、Warningが発生します。
ですので、isset = !is_nullと思い、is_nullを使って判定を書いてしまうと、意図せずWarningを発生させてしまうことになるので、注意が必要です。
// $varが未定義
var_dump(isset($var)); // false
var_dump(!is_null($var)); // false + $varが未定義のため、Warningが発生する
おわりに
isset・empty・is_nullは間違いやすい関数ではありますが、よく使う関数でもあります。
その特性をよく理解して、適切に使用できるようにしましょう。