PHPの「isset」「empty」「is_null」の特徴や違いがわからない、そんな方はいないでしょうか?
これら3つの関数は一見似ていますが、ちゃんと違いがあります。
今回はPHPエンジニアとして日々PHPを用いたシステム開発している筆者が、それぞれの関数の使い方や違いをわかりやすく解説します。
変数の存在確認や空かどうかのチェックを適切に行えるようになれば、PHPのエラー対策やフォーム処理が格段に向上します。
早見表と実践的なコード例を用いて、あなたのPHPスキルを一段階アップさせましょう。
- isset・empty・is_nullの特徴や違い
- 実際に使用した例文
- 使用する際の注意点
そもそもPHPって何ができる?PHPについてまとめた記事もあるので是非ご覧ください。

isset、empty、is_nullの早見表


早速ですが、この3つの違いが知りたいです!
この3つの関数は、一見どれも同じ機能を果たしており、存在するのかしないのかを確認する関数だと思う方もいるでしょう。
まずは3つの関数の違いを一目で理解できる比較表をご覧ください。
関数 | 主な用途 | 戻り値がtrueになる場合 | 特徴 |
---|---|---|---|
isset() | 変数が定義されており、nullでないことを確認 | 変数が存在し、nullでない | エラーを発生させずに未定義変数もチェック可能 |
empty() | 変数が「空」と見なせるかを確認 | 変数が未定義・null・false・0・”0″・””・array() | 幅広い値を「空」と判定 |
is_null() | 変数がnullかどうかを確認 | 変数がnullである | 未定義変数に使用するとエラーになる |



それぞれ違いがあるんですね!
これら3つの関数はそれぞれ異なる目的で使い分ける必要があります。
次より各3つについて、trueで返ってくる場合と、falseで返ってくる場合の両方を合わせて解説します。
issetとは?





まずはissetについて詳しく知りたいです。
issetは、変数が定義されていて、かつnull以外の値が設定されているかどうかを確認する関数です。
変数が存在し、nullでない場合にtrue、それ以外の場合はfalseを返します。
$username = "tanaka";
var_dump(isset($username)); // bool(true) 存在しているためtrueで返す
$age = null;
var_dump(isset($age)); // bool(false) nullのためfalseで返す
var_dump(isset($undefined_variable)); // bool(false) 変数が未定義だがエラーにならない
フォーム送信後のデータチェックやAPIからのレスポンス処理など、変数の存在確認によく使われます。
issetは未定義の変数をチェックしてもエラーにならないため、安全に変数の存在確認ができる便利な関数です。
emptyとは?





次にemptyについて詳しく知りたいです。
emptyは変数が「空」と見なせる値かどうかをチェックする関数です。
以下はempty関数を用いると「空」と判定される項目です。
- 未定義変数
- null
- false
- 整数の「0」
- 文字列の「’0’」
- 空文字列・空配列
ユーザー入力の必須チェックや、配列が空かどうかの確認などによく使われます。
$username = "";
var_dump(empty($username)); // bool(true) 空文字列のため、trueで返す
$scores = [];
var_dump(empty($scores)); // bool(true) 空配列のため、trueで返す
$age = 0;
var_dump(empty($age)); // bool(true) 0は「空」と判定される
$null = null
var_dump(empty($null)); // bool(true) nullは「空」と判定される
var_dump(empty($undefined_variable)); // bool(true) 変数が定義されていなくてもエラーにならない



issetではnullだとfalseで返ってきますが、emptyはtrueで返ってくるんですね。
emptyもissetと同様に未定義変数でもエラーにならないため、安全に使用できます。
PHPの配列って何?ややこしくてわからない!そんな方に向けた記事もご用意しています!


is_nullとは?





最後にis_nullについて知りたいです!
is_nullは変数がnull値かどうかだけをチェックする関数です。
変数がnullの場合にtrueを返し、それ以外の値ではfalseを返します。
$value = null;
var_dump(is_null($value)); // bool(true) nullなのでtrueが返ってくる
$name = "";
var_dump(is_null($name)); // bool(false) 空文字はnullではないためfalseがかえってくる
var_dump(is_null($undefined_variable)); // Notice: Undefined variable 定義されていないためエラー



is_nullは未定義変数の場合、エラーが出てしまいました。
データベースからのnull値チェックや、明示的にnullかどうかだけを判定したい場合に使います。
ただし、is_nullは未定義の変数に対して使用するとエラーが発生するため注意が必要です。
isset、empty、is_nullの使い方(例文)





3つの違いについてわかりました!でも実際の例文があるともっとわかりやすいなぁ…
前の章まではそれぞれ3つの違いや特徴、trueで返ってくる場合やfalseで返ってくる場合について説明しました。
ですが、Webアプリやシステムを開発を行っている方にとっては、具体的な例文があると分かりやすいでしょう。
それぞれの関数の具体的な使い方について、次で例を交えてご紹介していきます。
issetを使った例文
まずはissetを使った例文です。
// 1:フォームから送信されたデータの存在チェック
if (isset($_POST['username'])) {
$username = $_POST['username'];
echo "ようこそ、{$username}さん";
} else {
echo "ユーザー名を入力してください";
}
// 2:連想配列のキーが存在するかチェック
$user = [
'name' => '田中太郎',
'email' => 'tanaka@example.com'
];
if (isset($user['age'])) {
echo "年齢: {$user['age']}歳";
} else {
echo "年齢情報がありません"; // こちらを呼び出す
}
// 3:複数の変数を同時にチェック
if (isset($first_name, $last_name, $email)) {
// すべての変数が定義されており、nullでない場合の処理
register_user($first_name, $last_name, $email);
}
まず1つ目は、入力フォームを使った例文です。
name属性「’username’」の入力フォームに名前が入力された場合は「ようこそ、○○さん」と返すのに対し、入力がない場合は「ユーザー名を入力してください」と返します。
2つ目は配列のキーが存在するかのチェックです。
連想配列$useのキー「’age’」がある場合は「年齢:○○歳」と返すのに対し、ない場合は「年齢情報がありません」と返します。



今回はキーに「’age’」が無いので「年齢情報がありません」が返ってきます。
3つ目は複数の変数の同時チェックです。
$first_name・$last_name・ $email3つの変数が存在する場合、「register_user」という関数を呼び出します。
emptyを使った例文
次はemptyを使用した実践的な例を見てみましょう。
// 1:必須入力項目のチェック
if (empty($_POST['email'])) {
$errors[] = "メールアドレスは必須項目です";
}
// 2:配列が空かどうかのチェック
$results = search_database($keyword);
if (empty($results)) {
echo "検索結果がありませんでした";
} else {
foreach ($results as $result) {
// 結果の表示処理
}
}
// 3:条件分岐での活用
$message = empty($username) ? "ゲスト" : $username;
echo "ようこそ、{$message}さん";
// if文で置き換え
if (empty($username)) {
$message = "ゲスト";
} else {
$message = $username;
}
echo "ようこそ、{$message}さん";
こちらも1つ目は入力フォームを使った例文です。
name属性「’email’」の入力フォームにメールアドレスが入力されていない場合、配列$errorsに「メールアドレスは必須項目です」が代入されます。
2つ目は配列が空かどうかチェックする例文です。
関数search_databaseの引数に$keywordを設定、返ってきた値が$resultに代入され空の場合、「結果がありませんでした」が返ってきます。
もし空でない場合は、foreachで処理を行います。
3つ目はif文を使った例文です。



上はif文の省略法になります。
下に改めてif文を書いてみました。
$usernameが空の場合$messageには「’ゲスト’」が代入され、「ようこそ、ゲストさん」と呼び出されます。
$usernameが空でない場合は$messageに$usernameが代入され、「ようこそ、○○さん」となります。
PHPのforeachってどうやって使う?初心者向けの記事を読んでforeachをマスターしよう!


is_nullを使った例文
最後はis_nullを活用した例です。
// 1:データベースから取得した値がnullかチェック
$user_data = get_user_by_id(123);
if (is_null($user_data['last_login'])) {
echo "初回ログインです";
} else {
echo "前回のログイン: " . format_date($user_data['last_login']);
}
// 2:null合体演算子(PHP 7以降)との組み合わせ
function get_config_value($key) {
$config = get_config();
return $config[$key] ?? null;
}
$timeout = get_config_value('timeout');
if (is_null($timeout)) {
$timeout = 30; // デフォルト値を設定
}
1つ目はget_user_by_id関数より、データベースから取得したid = 123の値がnullかどうか判断します。
nullの場合は「初回ログインです」が返され、nullでない場合は「前回のログイン:○○」が返されます。
2つ目は少し応用的な例文です。
get_config_value関数の引数に「’timeout’」を設定、get_config関数を呼び出して配列$configに代入します。
配列$config[$key]がnullでない場合はその値を返し、そうでなければnullを返します。
そうして返された$timeoutがnullの場合、$timeoutに整数30が代入されるという例文です。
isset、empty、is_nullを使うときの注意点





最後にこの3つを使うときの注意点を知っておきたいです。
これらの関数を効果的に使うには、いくつかの注意点があります。
違いや特徴の解説と重複する部分もありますが、改めて初心者がつまずきやすいポイントを抑えておきましょう。
次で各関数についての注意点を、例文をあわせて紹介します。
issetの注意点
issetを使う際の主な注意点は以下の通りです。
- nullの値に対してはfalseを返す
- 値が0や空文字列でもtrueを返す(定義されていると判断)
- 複数の変数を同時にチェックする場合、すべてがissetの条件を満たさないとfalseになる
改めて例文を見てみます。
// 注意点の例
$value = null;
var_dump(isset($value)); // bool(false)
$zero = 0;
var_dump(isset($zero)); // bool(true) 0は「設定されている」と判断される
$empty_string = "";
var_dump(isset($empty_string)); // bool(true) 空文字も「設定されている」
$a = 1;
$b = null;
$c = 3;
var_dump(isset($a, $b, $c)); // false($b が null であるため)



issetはnullの場合falseを返す!これを覚えておきましょう。
emptyの注意点
emptyを使用する際に気をつけるべきポイントです。
- 数値の0や文字列の”0″もtrueになるため、数値入力フォームなどでは注意が必要
- 「空」の定義が広いため、具体的な値チェックを行いたい場合は他の方法が適してる
- 変数の型を考慮しない判定のため、型の違いによるバグが発生する可能性がある
emptyも例文を見てみます。
// 注意すべきemptyの動作
$zero = 0;
var_dump(empty($zero)); // bool(true) 数値の0は「空」と判定される
$zero_string = "0";
var_dump(empty($zero_string)); // bool(true) 文字列の"0"も「空」と判定される
// 数値入力フォームでの問題例
$age = $_POST['age']; // "0"が送信された場合
if (empty($age)) {
echo "年齢を入力してください"; // 0歳と入力しても「空」と判定される
}



データ型は考慮しないので、注意が必要ですね。
is_nullの注意点
is_nullを使用する際の重要な注意点です。
- 未定義変数に対して使用するとエラーが発生する
- 空文字列や0はnullではないので、falseを返す
- PHPのnullは大文字小文字を区別しない(NULL, null, NuLlは同じ)
- データベース操作では、SQL NULLとPHPのnullの違いに注意する必要がある
以下、is_nullの注意点を踏まえた例文です。
// is_nullの注意点
// var_dump(is_null($undefined)); // Notice: Undefined variable
// 事前にissetでチェックしてから使うのが安全
if (isset($value)) {
if (is_null($value)) {
echo "値はnullです";
}
} else {
echo "変数が定義されていません";
}
// 空文字はnullではない
$empty_string = "";
var_dump(is_null($empty_string)); // bool(false)



「null」と「空文字」は同じではないので、注意しましょう。
まとめ
今回はPHPの「isset」「empty」「is_null」の3つの関数の特徴や違い、注意点を解説しました。
issetは変数が定義されていて値がnull以外の場合にtrueを返し、フォーム送信データの確認などに適しています。
emptyは変数が「空」と見なせる値(未定義・null・false・0・”0″・””・array()など)の場合にtrueを返し、必須入力チェックに便利です。
is_nullは変数が厳密にnullかどうかのみを判定しますが、未定義変数にはエラーを発生させる特徴があります。
0や空文字がemptyではtrueになる点や、未定義変数をis_nullで直接確認できない点などの注意点を理解して、使い分けていきましょう。
DMM WEBCAMPではPHPの基礎から応用まで実践的に学べます。PHPをマスターしたい、Webエンジニアになりたい方は是非DMM WEBCAMPをチェックしてみてください。
\ PHPをマスターしよう!/