こんにちは!
今回は「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
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つの関数の中で未定義変数を検出に使われるのは、isset
とempty
だけです。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
関数などありますが、一つの選択肢として知っておくと良いと思います。
コメント