まえがき
PHPプログラミングにおいて、isset()関数とempty()関数は、変数を扱う際に非常に重要です。
これらの関数は似ているように見えますが、異なる目的で使用されます。
この記事では、それぞれの関数の基本的な違いと、どのような場合に使い分けるべきかを紹介します。
サンプルコードはPHP Playground
で実行できます。
isset()の基本
isset()は、変数がセットされていて、かつnullでないことを確認する関数です。
主に変数が存在しているかどうかをチェックする際に使用します。
例:isset()の使用
1
2
3
4
5
6
  | <?php
if (isset($var)) {
    echo '$var はセットされています。';
} else {
    echo '$var はセットされていません。';
}
  | 
empty()の基本
empty()は、変数が「空」かどうかをチェックする関数です。
変数が存在しない、またはその値がnull、0、空の文字列、空の配列などの場合、empty()はtrueを返します。
以下は、各コードサンプルの下にそれぞれの実行結果を示した例です。
例 1: 変数が未定義の場合
1
2
3
4
5
6
7
  | <?php
// $undefined は宣言していない変数です。
if (empty($undefined)) {
    echo "例1: 未定義の変数は empty() で true を返します。";
} else {
    echo "例1: 未定義の変数には値があります。";
}
  | 
1
  | 例1: 未定義の変数は empty() で true を返します。
  | 
例 2: 変数が null の場合
1
2
3
4
5
6
7
  | <?php
$var = null;
if (empty($var)) {
    echo "例2: \$var が null の場合、empty() は true を返します。";
} else {
    echo "例2: \$var には値があります。";
}
  | 
1
  | 例2: $var が null の場合、empty() は true を返します。
  | 
例 3: 変数が 0 の場合
1
2
3
4
5
6
7
  | <?php
$var = 0;
if (empty($var)) {
    echo "例3: \$var に 0 が設定されている場合、empty() は true を返します。";
} else {
    echo "例3: \$var には値があります。";
}
  | 
1
  | 例3: $var に 0 が設定されている場合、empty() は true を返します。
  | 
例 4: 変数が “0”(文字列のゼロ)の場合
1
2
3
4
5
6
7
  | <?php
$var = "0";
if (empty($var)) {
    echo "例4: \$var に文字列 \"0\" が設定されている場合、empty() は true を返します。";
} else {
    echo "例4: \$var には値があります。";
}
  | 
1
  | 例4: $var に文字列 "0" が設定されている場合、empty() は true を返します。
  | 
例 5: 変数が空文字列 ("") の場合
1
2
3
4
5
6
7
  | <?php
$var = "";
if (empty($var)) {
    echo "例5: \$var に空文字列が設定されている場合、empty() は true を返します。";
} else {
    echo "例5: \$var には値があります。";
}
  | 
1
  | 例5: $var に空文字列が設定されている場合、empty() は true を返します。
  | 
例 6: 変数が空の配列の場合
1
2
3
4
5
6
7
  | <?php
$var = array();
if (empty($var)) {
    echo "例6: \$var に空の配列が設定されている場合、empty() は true を返します。";
} else {
    echo "例6: \$var には値があります。";
}
  | 
1
  | 例6: $var に空の配列が設定されている場合、empty() は true を返します。
  | 
例 7: 変数が false の場合
1
2
3
4
5
6
7
  | <?php
$var = false;
if (empty($var)) {
    echo "例7: \$var に false が設定されている場合、empty() は true を返します。";
} else {
    echo "例7: \$var には値があります。";
}
  | 
1
  | 例7: $var に false が設定されている場合、empty() は true を返します。
  | 
例 8: 変数に値が設定されている場合(非空)
1
2
3
4
5
6
7
  | <?php
$var = "Hello, world!";
if (empty($var)) {
    echo "例8: \$var は empty() で true を返します。";
} else {
    echo "例8: \$var には値があります。";
}
  | 
例 9: 数値が 1 の場合(非空)
1
2
3
4
5
6
7
  | <?php
$var = 1;
if (empty($var)) {
    echo "例9: \$var は empty() で true を返します。";
} else {
    echo "例9: \$var には値があります。";
}
  | 
例 10: 配列に要素がある場合(非空)
1
2
3
4
5
6
7
  | <?php
$var = array(1, 2, 3);
if (empty($var)) {
    echo "例10: \$var は empty() で true を返します。";
} else {
    echo "例10: \$var には値があります。";
}
  | 
各例では、empty() の挙動に合わせたメッセージを表示しています。
このように、empty() は「存在しない変数」や「値が false と評価されるもの(null, 0, “0”, 空文字列, 空配列, false)」に対して true を返します。
issetとemptyの比較結果
以下は、各ケースにおける isset($var) と empty($var) の結果をまとめた表です。
| ケース | 値 | isset($var) の結果 | empty($var) の結果 | 
|---|
| 例1: 未定義の場合 | 変数が未定義 | false | true | 
| 例2: null の場合 | null | false | true | 
| 例3: 0 の場合 | 0 | true | true | 
| 例4: “0” の場合 | "0" | true | true | 
| 例5: 空文字列の場合 | "" | true | true | 
| 例6: 空の配列の場合 | array() | true | true | 
| 例7: false の場合 | false | true | true | 
| 例8: 非空文字列の場合 | "Hello, world!" | true | false | 
| 例9: 非ゼロ数値の場合 | 1 | true | false | 
| 例10: 要素あり配列の場合 | array(1, 2, 3) | true | false | 
この表から分かるように、
isset() は変数が定義されていて、かつ null 以外 の値がセットされている場合に true を返します。empty() は「値が偽と評価される」場合(未定義、null、0、“0”、空文字列、空配列、false)に true を返します。
まとめ
isset()とempty()は、PHPで変数を扱う際に非常に役立つ関数です。
適切なシチュエーションで適切な関数を使い分けることで、より効率的かつ正確なプログラミングが可能になります。