はじめに
PHPをつかっていく中で、配列が空かどうかをチェックする方法としてemptyを使っていましたが、issetやis_nullメソッドが登場する解説もあり、具体的に何がどう違うのかを理解できていないという課題がありました。
この記事では、そもそも null とは何かについ整理し、これらの関数の違いをまとめていきます。
null とは
null とは、「変数やデータに何の値も設定されていない状態」を意味する特別な型・値です。
具体的には以下のようなときに null と判定されます。
・変数に明示的に null を代入した場合
・関数から return; だけで値を返さなかった場合(戻り値が null)
・存在しないオブジェクトのプロパティにアクセスした場合
・存在しない配列のキーにアクセスした場合(未定義のキーの値は null として扱われる)
つまり、変数自体は定義されているが、その中身が空である(存在しない)ことを表します。
isset()について
isset(mixed $var, mixed ...$vars): bool
公式ドキュメントには以下のように解説されています。
変数が宣言されていること、そして null とは異なることを検査する
つまり、このメソッドでは、
指定した引数である変数が定義されていて、null でない場合に true を返す
変数が未定義 または null の場合に false を返す
という動作をします。
isset() は null のみを「値なし」とみなし、null 以外の false, 0, '', [] などは 「値あり」とみなします。
これは empty との大きな違いです。
empty() について
empty(mixed $var): bool
公式ドキュメントには以下のように解説されています。
変数が空であるかどうかを検査します。 変数が空であるとみなされるのは、変数が存在しない場合や 変数の値が false に等しい場合です。
empty() は、PHPで「変数が空であるかどうか」を調べるための関数です。
具体的には、
・""(空文字列)
・0(整数 0)
・"0"(文字列の 0)
・0.0(小数 0)
・false(ブール値 false)
・[](空配列)
・null(null値)、未定義の変数(存在しない変数でもOK)
が空に該当します。
empty()がisset()と異なっている点は、変数が未定義でもエラーを出さずに false として扱えること、
null だけでなく、0 や '' なども「空」とみなす点です。
値が何か入っているかどうかをざっくり知りたいときに使用するのに適していると言えるでしょう。
is_null について
is_null(mixed $value): bool
公式ドキュメントには以下のように解説されています。
指定した変数が null かどうかを調べます。
つまり、単に変数の値が null かどうかを調べるための関数です。
上記の2つの関数と異なる点は、変数が未定義の場合に Warning が発生すること点です。
まとめ
守備範囲の広さ順でいうと、「空であるか」をざっくり調べるempty()、「定義されていて null でないか」を調べる isset()、「値が null かどうか」を正確に調べる is_null() と言えるでしょう。
これらを目的に応じて使い分けられるようになっていきましょう!
最後までお読みいただき、ありがとうございました。
参考URL
https://www.php.net/manual/ja/function.isset.php
https://qiita.com/YutaManaka/items/94a6c4a1d19d88ce2e3a
https://frog-song.hatenablog.com/entry/2021/12/04/013245
https://www.rstone-jp.com/column/139760/
https://www.w3schools.com/php/func_var_empty.asp
https://techplay.jp/column/1813
https://www.sejuku.net/blog/22964