PHPのisset()とempty():初心者向けの使い分けガイド

JavaScriptを有効にしてください

前書き

PHPプログラミングにおいて、isset()関数とempty()関数は、変数を扱う際に非常に重要です。
これらの関数は似ているように見えますが、異なる目的で使用されます。
この記事では、それぞれの関数の基本的な違いと、どのような場合に使い分けるべきかを紹介します。

サンプルコードはPHP Playground で実行できます。

isset()の基本

isset()は、変数がセットされていて、かつnullでないことを確認する関数です。
主に変数が存在しているかどうかをチェックする際に使用します。

例:isset()の使用

PHP
1
2
3
4
5
6
<?php
if (isset($var)) {
    echo '$var はセットされています。';
} else {
    echo '$var はセットされていません。';
}
実行結果
1
$var はセットされていません。

empty()の基本

empty()は、変数が「空」かどうかをチェックする関数です。
変数が存在しない、またはその値がnull、0、空の文字列、空の配列などの場合、empty()はtrueを返します。

以下は、各コードサンプルの下にそれぞれの実行結果を示した例です。

例 1: 変数が未定義の場合

php
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 の場合

php
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 の場合

php
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”(文字列のゼロ)の場合

php
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: 変数が空文字列 ("") の場合

php
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: 変数が空の配列の場合

php
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 の場合

php
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: 変数に値が設定されている場合(非空)

php
1
2
3
4
5
6
7
<?php
$var = "Hello, world!";
if (empty($var)) {
    echo "例8: \$var は empty() で true を返します。";
} else {
    echo "例8: \$var には値があります。";
}
実行結果
1
例8: $var には値があります。

例 9: 数値が 1 の場合(非空)

php
1
2
3
4
5
6
7
<?php
$var = 1;
if (empty($var)) {
    echo "例9: \$var は empty() で true を返します。";
} else {
    echo "例9: \$var には値があります。";
}
実行結果
1
例9: $var には値があります。

例 10: 配列に要素がある場合(非空)

php
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 には値があります。";
}
実行結果
1
例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で変数を扱う際に非常に役立つ関数です。
適切なシチュエーションで適切な関数を使い分けることで、より効率的かつ正確なプログラミングが可能になります。


スポンサーリンク

共有

もふもふ
著者
もふもふ
プログラマ。汎用系→ゲームエンジニア→Webエンジニア→QAエンジニア