isset関数とempty関数は共に変数に何か入っているか調べる関数です。空でないことを確認して、次の処理に進むときに使います。詳しくは、以下のページをご覧ください。
○PHPマニュアル
[manual func=”empty”] — 変数が空であるかどうかを検査する
[manual func=”isset”] — 変数がセットされていること、そして NULL でないことを検査する
<?php $value = "テスト"; if (isset($value)) { echo "中身は入っています"; } else { echo "空です"; } ?>
○実行結果
中身は入っています
empty関数も同じように変数が空でないかどうかを確認することができます。
<?php $value = "テスト"; if (!empty($value)) { echo "中身は入っています"; } else { echo "空です"; } ?>
○実行結果
中身は入っています
issetとemptyの違い
変数の中身が「0」(半角数字の0や数値文字列の”0″)だった場合、empty関数は空っぽだと判断します。
<?php $value = "0"; if (!empty($value)) { echo "中身は入っています"; } else { echo "空です"; } ?>
○実行結果
空です
その他、次のような値は空だとみなされます。
“” (空文字列)
0 (整数 の 0)
0.0 (浮動小数点数の 0)
“0” (文字列 の 0)
NULL
FALSE
array() (空の配列)
$var; (変数が宣言されているが、値が設定されていない)
(PHPマニュアルより引用)
一方のisset関数は中身が「0」でも入っていると判断します。
<?php $value = "0"; if (isset($value)) { echo "中身は入っています"; } else { echo "空です"; } ?>
○実行結果
中身は入っています
NULLはisset関数でもempty関数でも空だと判断される
注意が必要なのは「NULL」でしょうか。
empty関数では空だと判断されそうなのはイメージ通りです。
<?php $value = NULL; if (!empty($value)) { echo "中身は入っています"; } else { echo "空です"; } ?>
○実行結果
空です
isset関数でもNULLは空だと判断されます。
<?php $value = NULL; if (isset($value)) { echo "中身は入っています"; } else { echo "空です"; } ?>
○実行結果
空です
isset関数を使って変数や配列要素の存在チェックをしている場合、NULLが入っていると「存在しない」と判断してしまうので注意が必要です(実は存在するが中身がNULL)。
「!」はempty関数の省略形?
0などを空だと判断するかどうかの違いでisset関数とempty関数の違いがわかりましたが、省略形とも言える「!」を見てみましょう。
次のように記述して、変数の中身が空かどうか判断することができます。
<?php $value = "テスト"; if (!$value) { echo "空です"; } else { echo "中身は入っています"; } ?>
○実行結果
中身は入っています
よくわからない構文かもしれませんが「if (!$value)」は「if ($value == false)」のことなので、falseに評価される変数を「空っぽ」だと判断している仕組みです。中身が空の場合も含めて数字の0もfalseに評価されるので、結局はempty関数と同じ動作のようになります。
<?php $value = "0"; if (!$value) { echo "空です"; } else { echo "中身は入っています"; } ?>
○実行結果
空です
ということで、empty関数で変数が空かどうかチェックするときは、代わりに「!」を使うことができます。isset関数の代わりではないので注意しましょう。
空かどうかの「!」の逆に「何か入っているかどうか」をチェックする場合は、「!」を取り去って次のように変数名だけを調べれば大丈夫です。
<?php $value = "テスト"; if ($value) { echo "中身は入っています"; } else { echo "空です"; } ?>
「if ($value)」と書いてあると、もはや何の処理なのかよくわからなくなるかもしれませんが、「if ($value == true)」の省略形です。変数に何か入っていればtrueに評価されるということを利用した「省略形」です。
「0」を指定すれば空だと判断されるのでempty関数の代わりになります(isset関数の代わりではなく)。