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関数とは?
empty(エンプティ)関数は、「値が空っぽかどうか」を調べるための関数です。
「空っぽ」とは、次のような状態です:
- 空文字列("")
- 数字のゼロ(0)
- 文字のゼロ("0")
- NULL(ヌル)
- 空の配列
- 未定義の変数
つまり、「中身があるかないかをざっくりチェックしたい」ときに使えます。
$value = "";
if (empty($value)) {
echo "値が空です。";
}
値が空です。
注意点: emptyは、変数が定義されていなくてもエラーになりません。とてもやさしい関数です。
3. isset関数とは?
isset(イセット)関数は、「変数が存在していて、なおかつNULLでないか」をチェックする関数です。
存在している=定義されていて、NULLじゃない、という状態です。
$name = "太郎";
if (isset($name)) {
echo "名前は設定されています。";
}
名前は設定されています。
このように、issetは「その変数はある?」と確認するときに使います。emptyより厳密なチェックです。
ちなみに、NULLの場合はfalseになります:
$test = null;
if (isset($test)) {
echo "ある";
} else {
echo "ない";
}
ない
4. is_null関数とは?
is_null(イズ・ヌル)関数は、「その変数がNULLかどうか」を調べるための関数です。
NULLとは、「何も入っていない特別な状態」を意味します。値が空でもなく、ゼロでもなく、「存在はしてるけど中身はない」状態です。
$value = null;
if (is_null($value)) {
echo "値はNULLです。";
}
値はNULLです。
issetとis_nullは、セットで使うことも多いです。違いを理解しておくと便利です。
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の処理全体が安定してきますし、エラーの原因も減ります。これからも積極的に試してみてくださいね。」