isset()関数とempty()関数
isset()関数とempty()関数はどちらも変数の状態を確認するための関数です。似ているように見えますが、動作方法や目的が異なるため、適切に使い分けることが重要です。
isset()関数は、変数が存在し、かつnullでないかを確認する関数です。empty()関数は、変数が空であるかどうかを確認する関数です。
このようなisset()関数とempty()関数の概念整理および使用方法と違いについて説明します。
isset()関数
- PHPバージョン
- 4+
変数が存在し、かつnullでないことを確認
この関数は、変数が宣言されており、その値がnullでない場合にtrueを返します。
値が空であっても変数が存在すればtrueを返し、変数が宣言されていないか、またはnullの場合はfalseを返します。
$var1 = '';
$var2 = null;
var_dump(isset($var1)); // true
var_dump(isset($var2)); // false
empty()関数
- PHPバージョン
- 4+
変数が空であるかを確認
この関数は、変数が宣言されており、その値が空の値である場合にtrueを返します。
空の値とは、0、''、null、false、array()などの値を指します。
ただし、空のオブジェクトはfalseとはみなされず、オブジェクトが存在する場合はfalseを返します。
$var1 = '';
$var2 = null;
$obj = new stdClass();
var_dump(empty($var1)); // true
var_dump(empty($var2)); // true
var_dump(empty($obj)); // false(空のオブジェクトはemptyではありません)
違いの比較
isset()関数とempty()関数の違いを返り値を基準にまとめた表で比較してみます。
| 返り値 | isset() |
empty() |
|---|---|---|
| 変数が存在しない場合 | false |
true |
| 変数に値がある場合 | true |
false |
変数の値がない場合(null) |
false |
true |
変数の値が空文字列('')の場合 |
true |
true |
変数の値が0の場合 |
true |
true |
| 変数の値が空の配列の場合 | true |
true |
| 変数の値が空のオブジェクトの場合 | true |
false |
柔軟なエラー処理
isset()関数とempty()関数の比較は非常に重要です。
未定義の変数や誤った変数にアクセスした際に発生する警告メッセージを回避する方法です。
例えば、未定義の変数をisset()で確認すればエラーなく処理できますが、empty()はその変数が宣言されている必要があります。
したがって、isset()は変数が存在するかを確認する際に適しており、empty()は変数が空であるかを確認する際に適しています。