PHPのisset,empty,is_nullの違いと使い方を解説

PHP

こんにちは!

今回は「PHPのisset, empty, is_nullの使い分け」というテーマで解説していきます。

PHPを使っていると、isset, empty, is_nullが頻出します。ただ、これらの違いがよくわからずに苦戦している人も多いのではないでしょうか。

筆者も、学習初期の頃にこれら3つの関数が混同してかなり苦戦していました。そこで、今回は以下のようなお悩みを解決します。

読者
読者

「PHPのissetとemptyとis_nullの違いがわからない…」

「PHPのissetとemptyとis_nullってどうやって使い分ければいいんだろう…」

それでは、早速みていきましょう!

isset, empty, is_nullの違いを比較

判定内容trueの場合falseの場合
isset変数がセットされている変数がセットされ、nullではない変数がnull、または未定義
empty変数が空であるか空の値(0, false, null, ”等)変数に値が存在する
is_null変数がnullか変数がnull変数がnullでない
isset, empty, is_null比較表

isset, empty, is_nullそれぞれの使い分け

isset

isset関数は、変数が宣言されていて、かつ値がnullではない場合にtrueを返します。主に、変数が定義されているかどうか調べたいときに使われます。

$var = 'Hello';
if (isset($var)) {
  echo '変数はセットされています';
}

逆に、変数が未定義の場合や値がnullの場合はfalseを返します。

if (isset($var)) {
  echo '変数が未定義です';
}

$var = null; // ここでnullを代入
if (isset($var)) {
  echo '変数がnullです';
}

empty

empty関数は、変数の値が空の場合にtrueを返します。空の値というのは、0, false, null, ”などを含みます。変数が未定義の場合も、trueを返します。主に、変数の値が空かどうか調べたいときに使われます。

$var = '';
if (empty($var)) {
    echo '変数は空です';
}

is_null

is_null関数は、変数の値がnullの場合にtrueを返します。変数の値がnullかどうか調べたいときに使われます。

$var = null;
if (is_null($var)) {
    echo '変数はnullです';
}

よくある誤解と使用例

ここでは、3つの関数のよくある誤解をご紹介します。この辺りは混同しがちなので、気をつけましょう!

誤解1. is_nullが未定義変数にも使えるという誤解

3つの関数の中で未定義変数を検出に使われるのは、issetemptyだけです。emptyは空である場合にtrueを返しますが、この「空」というのは未定義変数も含まれます。

is_nullを未定義変数に対して使ってもエラーにはなりませんが、以下のような警告が出ます。

var_dump(is_null($undefinedVar));
> PHP Warning:  Undefined variable $undefinedVariable

一般的にis_nullは未定義変数に対しては使われないと覚えておきましょう。

誤解2. issetとemptyの挙動に関する誤解

isset関数は変数に値がセットされている場合にtrueを返し、empty関数は変数が空の場合にtrueを返すので、正反対の値を返します。

// 未定義の変数
if (isset($undefined_var)) {
    echo "この変数はセットされています。";
} else {
    echo "未定義の変数です。";  // こちらが出力される
}

if (empty($undefined_var)) {
    echo "この変数は空です。";  // こちらが出力される(エラーは発生しない)
}

真逆のことを調べているんだなーという、ざっくりとしたイメージを持ちましょう。

少し応用的な使い方

isset関数を使って、配列に特定のキーが存在するかどうかを確認することができます。

$array = ['name' => 'John'];
if (isset($array['name'])) {
  echo "キーが存在します";
}

他にもオブジェクトなどでも使うことができ、使用範囲が広いです。

配列のキーの存在確認には、他にもarray_key_exists関数などありますが、一つの選択肢として知っておくと良いと思います。

コメント

タイトルとURLをコピーしました