PHPの真偽値と条件判定をやさしく解説!初心者でもわかるempty・isset・is_nullの使い方
生徒
「PHPで値があるかどうかを調べる方法ってありますか?」
先生
「はい、PHPではemptyやisset、is_nullという関数を使って、値の有無や状態を調べることができますよ。」
生徒
「それぞれどう違うんですか? 何を使えばいいのか迷いそうです…」
先生
「それでは順番に、分かりやすく丁寧に見ていきましょう!」
1. 真偽値(しんぎち)とは?条件判定の基本をマスター
PHPをはじめ、プログラミングの世界でプログラムに「判断」をさせるために欠かせないのが真偽値(しんぎち)です。
真偽値とは、ある条件が成り立っているかどうかを表す「true(真:はい)」と「false(偽:いいえ)」という2つの値だけを持つデータ型(boolean型)のことです。私たちの日常でも、無意識のうちにこの真偽値を使って判断をしています。
- 「外は雨が降っていますか?」 → 降っていれば true、止んでいれば false
- 「信号は青ですか?」 → 青なら true、赤や黄色なら false
PHPでは、この「true」か「false」の結果によって、次に実行する処理を切り替えることができます。これを「条件分岐」と呼びます。まずは簡単なサンプルコードで、真偽値がどのように扱われるか見てみましょう。
// 変数に「正しい」という状態(真偽値)を代入します
$is_sunny = true;
// もし $is_sunny が true だったら実行する
if ($is_sunny) {
echo "今日はいい天気ですね!洗濯物を干しましょう。";
}
このプログラムでは、変数 $is_sunny に true が入っているため、「今日はいい天気ですね!」というメッセージが表示されます。もしここが false だった場合は、何も表示されません。
「このデータは空かな?」「ユーザーはログインしているかな?」といったチェックはすべて、最終的にこの true か false に変換されて判定されます。これから紹介する関数も、すべてこの真偽値を返してくれる便利なツールなのです。
2. empty関数とは?値の有無を「ざっくり」判定する便利な道具
PHPの開発で最も頻繁に登場するのがこのempty(エンプティ)関数です。その名の通り、「中身が空(から)かどうか」を自動で判断して、結果を真偽値(true / false)で教えてくれます。
初心者の方が特に迷いやすいのが「何をもって空とみなすか」という点ですが、PHPのemptyは非常に気が利く設計になっており、以下のような状態をすべて「空(true)」と判定してくれます。
- 空の文字列(
""):文字が一つも入力されていない状態 - 数字のゼロ(
0や0.0):数値としてのゼロ - 文字のゼロ(
"0"):文字列としてのゼロ(※PHP特有の仕様です) - NULL(ヌル):値そのものが存在しない状態
- 空の配列(
[]):要素が一つも入っていないリスト - 未定義の変数:まだ作られていない変数
emptyの最大のメリットは、「変数が存在するかどうか」と「中身が空か」を同時にチェックしてくれる点です。もし変数が定義されていなくてもエラー(Warning)を出さずに判定してくれるため、初心者でも安心して使える「やさしい関数」と言えます。
例えば、Webサイトの入力フォームで「ユーザーが何か文字を入力したかな?」とチェックしたい時に、以下のように記述します。
// 例1:空の文字列の場合
$user_input = "";
if (empty($user_input)) {
echo "入力フォームが空です。何か入力してください。";
}
// 例2:未定義の変数をチェックする場合
// $nickname という変数を定義していなくても、emptyならエラーになりません
if (empty($nickname)) {
echo "ニックネームが設定されていません。";
}
入力フォームが空です。何か入力してください。
ニックネームが設定されていません。
このように、「細かい型(数字なのか文字なのか)は気にせず、とにかくデータが入っているかだけを知りたい」という場面で、emptyは最強の味方になってくれます。実務では、お問い合わせフォームの必須項目チェックや、検索ワードが指定されているかの判定などで欠かせない存在です。
3. isset関数とは?「変数が用意されているか」をピンポイントで確認
isset(イセット)関数は、その名の通り「is set(セットされているか)」を調べるための道具です。具体的には、「変数が定義(作成)されていて、かつ中身が空っぽ(NULL)ではないこと」をチェックします。
前章のemptyは「0」や「空文字」もまとめて「空」と判定しましたが、issetはもっと厳格です。「たとえ中身が0や空っぽの文字でも、箱(変数)が存在して何かが入っていればOK!」と判断してくれるのが特徴です。
宅配便のボックスを想像してみてください。
- issetがtrue:ボックスの中に、荷物(データ)が入っている状態。
- issetがfalse:そもそもボックスが設置されていない、またはボックスの中身が完全に「空(NULL)」の状態。
まずは、もっとも基本的な「変数が存在するかどうか」を確認するコードを見てみましょう。
// 変数に「太郎」という値をセットします
$name = "太郎";
// issetで $name があるかどうかを判定
if (isset($name)) {
echo "変数「name」は存在しており、値もセットされています。";
}
変数「name」は存在しており、値もセットされています。
次に、プログラミングでよくある「NULL(ヌル)」という特殊な状態を判定してみます。PHPでは、値がNULLに設定されていると、issetは「セットされていない」とみなして false を返します。
// 変数は作ったけれど、中身を「NULL(空っぽ)」に設定した場合
$test_value = null;
if (isset($test_value)) {
echo "値があります。";
} else {
echo "値がないか、NULLが代入されています。";
}
値がないか、NULLが代入されています。
実務では、WebサイトのURLの末尾につくパラメータ(例:?id=123)が送られてきているかチェックする際や、ボタンが押されたかどうかを判定する際に、このissetが非常に重宝されます。変数が未定義のまま処理を進めてしまうと、プログラムが止まる原因(エラー)になりますが、issetで事前に確認することで安全なコードを書くことができるようになります。
4. is_null関数とは?「変数が完全に空っぽ(NULL)か」を厳密にチェック
is_null(イズ・ヌル)関数は、その名の通り「対象の変数がNULL(ヌル)であるかどうか」だけをピンポイントで調べるための関数です。
プログラミングの世界における「NULL」とは、単に数字の0が入っているのとは訳が違います。「値そのものが存在しない」「何もないことが定義されている」という、非常に特殊な状態を指します。
「中身が空のコップ」を想像してみてください。
- 空文字(""):コップはあるけれど、水が1滴も入っていない状態。
- 数字のゼロ(0):コップに「0」という名前の氷が入っている状態。
- NULL:そもそもコップの中に何も入っていないどころか、「中身が未確定」というラベルが貼られている状態。
is_nullは、この「NULLというラベル」が貼られている時だけ true を返します。実際のコードで、どのような動きになるか確認してみましょう。
// 変数に「何もない状態(null)」を代入します
$data = null;
// is_nullでチェック
if (is_null($data)) {
echo "この変数はNULL(空っぽ)です。";
}
// ちなみに、数字の 0 を入れてみると...
$number = 0;
if (is_null($number)) {
echo "これは表示されません。";
} else {
echo "数字の0は、NULLではありません。";
}
この変数はNULL(空っぽ)です。
数字の0は、NULLではありません。
このように、is_nullは「0」や「空文字」をデータとして認め、「本当に何も設定されていない状態(NULL)」だけをあぶり出したい時に使います。データベースから取得した値が空だった場合や、関数の戻り値がエラーで何も返ってこなかった時の判定など、データの正確さが求められる場面で非常に重要な役割を果たします。
isset(値があるか?)の反対の判定を行いたい場合に、あわせて覚えておくと非常に便利なツールです。
5. empty・isset・is_nullの違いを表で整理
それぞれの違いを分かりやすく表でまとめました。
| チェック内容 | empty | isset | is_null |
|---|---|---|---|
| 変数が存在しない場合 | true | false | エラー |
| NULLの場合 | true | false | true |
| 空文字("") | true | true | false |
| 数字の0 | true | true | false |
| 値がある文字 | false | true | false |
使い分けの目安は次のとおりです:
- ざっくり空かどうか確認 → empty
- 変数があるかどうか確認 → isset
- NULLかどうかだけ確認 → is_null
6. 実際に使う場面はどんなとき?
PHPのWebサイトやアプリでは、ユーザーが入力した情報がちゃんとあるか、間違っていないかを確認するときに、emptyやissetがよく使われます。
例えば、お問い合わせフォームの「名前」が入力されているかどうかを確認するには、次のように書きます:
if (empty($_POST['name'])) {
echo "名前を入力してください。";
}
このように、「入力チェック」「データチェック」「バグ防止」など、あらゆる場面で真偽値や条件判定は活躍します。
7. 条件分岐(if文)との組み合わせが基本
真偽値は、if文(イフぶん)と一緒に使うのが基本です。「もし◯◯だったら、〜する」という命令を実現するためのしくみです。
以下のように書くことで、emptyなどと連携して動作を制御できます。
if (!empty($email)) {
echo "メールアドレスが入力されています。";
} else {
echo "メールアドレスを入力してください。";
}
このように、条件によって表示内容を変えられるようになると、PHPの幅が一気に広がります。
まとめ
PHPで値の有無や状態を確実に判断するための考え方
ここまで学んできたように、PHPのempty、isset、is_nullはとてもよく似ているようでいて、それぞれまったく違う役割を持っています。真偽値という基本的な考え方を理解しながら、値があるのか、変数が存在しているのか、NULLという特別な状態なのかを判断することで、Webフォームの入力チェックやデータの整合性の確認、予期せぬエラーの防止など、あらゆる場面で安定した動作につながります。
とくにPHPではユーザーの入力や外部システムからの値が常に想定どおりとは限らず、「空っぽ」「未定義」「NULL」「ゼロ」「空文字」など、さまざまな形で“値がないように見える状態”が現れます。こうしたケースを正確に区別するために、empty、isset、is_nullの違いを理解しておくことは欠かせません。どの関数を使えば安全なのか、どの条件分岐を採用すべきか、といった判断力が身につくと、PHPでの開発が格段に楽になります。
実践で役立つ使い分けのイメージ
emptyは、とにかく「ざっくり空かどうか」を知りたいときに向いています。フォームの入力が空かどうかを見るときなど、初心者がもっとも使いやすい関数です。一方のissetは「その変数はちゃんと存在していて、NULLではないか」を確認する強力なチェックで、とくにバグを防ぐために欠かせません。さらにis_nullは、値がNULLかどうかだけを判断したい場面で便利です。
この3つを状況に応じて組み合わせることで、より正確な入力チェックや条件判定ができるようになります。これはPHPの基礎でありながら、Webアプリケーションやフォーム処理、データ処理のすべての土台になる重要なポイントです。
サンプルコード(実践パターン)
以下は、フォームから送信されたデータを3つの関数でチェックする例です。
if (empty($_POST['email'])) {
echo "メールアドレスが入力されていません。";
} elseif (!isset($_POST['email'])) {
echo "メールアドレスが定義されていません。";
} elseif (is_null($_POST['email'])) {
echo "メールアドレスはNULLです。";
} else {
echo "入力されたメールアドレスを受け付けました。";
}
このように、場面ごとに適切な関数を選ぶことで、エラーを未然に防ぎ、安全で正確な処理ができるようになります。PHPで実務的なコードを書くうえでも、初心者の段階から判断の基準や仕組みを理解しておくことは大きな強みになります。
生徒
「emptyとissetとis_nullの違いがようやく分かりました! 同じように見えて、やっぱり用途が違うんですね。」
先生
「そのとおりです。PHPでは“値が存在するようで存在しない”というケースがとても多いので、違いを理解しておくと判断を誤らなくなります。」
生徒
「フォームの入力チェックにも全部使えそうですね。実際のコードを書いてみると、emptyが一番使いやすい気がします。」
先生
「そうですね。emptyは初心者にとって特に便利ですが、issetを併用するとより確実になりますし、NULLを扱うときはis_nullが役立ちます。」
生徒
「今回のサンプルみたいに3つを組み合わせると、安全なプログラムになるんですね。」
先生
「その感覚がとても大切ですよ。条件判定が正確にできると、PHPの処理全体が安定してきますし、エラーの原因も減ります。これからも積極的に試してみてくださいね。」