PHPのempty()とisset()の違いをわかりやすく解説|WordPressカスタマイズで使うPHP基礎
この記事の内容
「WordPressのPHPコードを見ると、empty()とisset()が頻繁に登場するが、何が違うのか分からない」——そんな疑問を抱えている方は多いはずです。
PHPは世界で最も広く使われているサーバーサイド言語の一つで、特にWordPressのテーマ・プラグインのほぼ全ての部分がPHPで書かれています。経営者として自社のWordPressサイトをカスタマイズしたり、Claude Codeにシステム改修を依頼したりする場面で、PHPコードの基本が読めると判断の質が上がります。
この記事では、PHPの中でも特に混同しやすいempty()とisset()の違いを非エンジニアの方に向けて解説します。「コードを書けるようになる」のではなく、「Claude Codeが生成したPHPコードの意図を読み取れるようになる」ことを目標にします。
この記事で得られること:
01 BASICS PHPのempty()とisset()の基本——何を判定するのか 結論から言うと「空かどうか」と「存在かつ非NULLか」の違い
まず結論をシンプルに整理します。
| 関数 | 判定内容 | 返り値(TRUE)の条件 |
|---|---|---|
| empty($var) | 変数が「空」かどうか | 変数が空・0・NULL・false・[]・"0"などの場合TRUE |
| isset($var) | 変数が存在して、NULLでないか | 変数が定義されていてNULLでない場合TRUE |
日常の言葉に置き換えると:
📚 用語解説
empty()(エンプティ関数):PHPで変数やデータが「空の状態」かどうかを判定する関数。空文字""・数値0・false・NULL・空配列[]・"0"などを「空」と見なしてTRUEを返す。フォーム入力の未入力チェックや配列の空チェックで頻繁に使われる。
📚 用語解説
isset()(イズセット関数):PHPで変数が「セット(定義)されていてNULLでない」かどうかを判定する関数。変数が存在してNULL以外の値を持つ場合TRUE。変数が未定義・NULLの場合FALSE。GETパラメータ・POSTデータの存在確認でよく使われる。
この2つの違いが最もよく出るのは「NULLの扱い」です。NULLはデータが「存在しない・未設定」を表す特殊な値ですが、empty()とisset()では正反対の判定をします。
| 変数の状態 | empty()の結果 | isset()の結果 |
|---|---|---|
| $var = NULL | TRUE(空と判定) | FALSE(存在しない・NULL) |
| $var = ""(空文字) | TRUE(空と判定) | TRUE(存在する・NULLでない) |
| $var = 0 | TRUE(空と判定) | TRUE(存在する・NULLでない) |
| $var = "hello" | FALSE(空でない) | TRUE(存在する) |
| $var = [](空配列) | TRUE(空と判定) | TRUE(存在する) |
| 未定義変数 | TRUE(空と判定) | FALSE(存在しない) |
02 EMPTY DETAILS empty()の動作詳細——「空」と判定される8つのパターン 「空」と見なされる値の全パターンを把握する
empty()がTRUE(空と判定)を返す値は以下の8種類です。これを把握しておくと、コードを読んだときに「この条件がTRUEになるのはどういうケースか」が即座に分かります。
| 値 | TRUEになるか | 具体例 | 注意点 |
|---|---|---|---|
| NULL | TRUE | $var = null | 最も多い「空」パターン |
| ""(空文字) | TRUE | $var = "" | フォームで何も入力しなかった状態 |
| 0(数値ゼロ) | TRUE | $var = 0 | 「値が入力された」が判定できない |
| "0"(文字列ゼロ) | TRUE | $var = "0" | "0"を有効な入力と認識できない |
| false | TRUE | $var = false | ブール値のfalse |
| [](空配列) | TRUE | $var = [] | 配列が空かどうかのチェックに最適 |
| 未定義変数 | TRUE | (変数自体がない) | エラーが出ないのでissetより安全 |
| 0.0(浮動小数ゼロ) | TRUE | $var = 0.0 | 数値計算に注意 |
「在庫数=0個」「価格=0円」「評価スコア=0点」のような「0」は意味のある値です。しかしempty()はこれらを全て「空」と判定します。フォームの「入力チェック」や「0を有効な値として扱いたい場面」では、empty()ではなくisset()または専用のバリデーション(入力検証)を使う必要があります。
逆に、empty()がFALSE(空でないと判定)を返す場合:
📚 用語解説
バリデーション(Validation):ユーザーが入力したデータが正しい形式・範囲・値かどうかを検証するプロセス。PHPでは「必須項目が空でないか(empty)」「変数が存在するか(isset)」「数値範囲が正しいか」などをチェックする。WordPressのフォーム処理やAPIのリクエスト処理で必ず実施する安全対策の一つ。
empty()が最も力を発揮するのは「フォームの未入力チェック」です。ユーザーが何も入力せずに送信した場合、POSTデータは空文字または未定義になります。empty()を使うことで、「未定義」「空文字」「NULL」の全パターンを一括でチェックできます。isset()だけでは空文字入力を見落とすリスクがあります。
03 ISSET DIFFERENCE isset()との決定的な違い——NULLの扱い方 「変数が存在するか」と「変数が使える状態か」は別の問題
empty()とisset()が最も異なるのは「NULLの扱い」です。
NULLに対するempty()とisset()の違い
$value = null; var_dump(empty($value)); // bool(true) ← NULLは「空」と判定 var_dump(isset($value)); // bool(false) ← NULLは「存在しない」と判定 // 未定義変数に対しては var_dump(empty($undefined)); // bool(true) ← エラーなく「空」と判定 var_dump(isset($undefined)); // bool(false) ← エラーなく「未定義」と判定
この違いが実際の業務システムで問題になるケース:
| 状況 | empty()を使うと | isset()を使うと | 正解 |
|---|---|---|---|
| フォームが未入力(空文字) | TRUE(正しく未入力検知) | TRUE(空文字は定義済み) | empty()が正解 |
| DBからNULL値が返ってきた | TRUE(空として処理) | FALSE(値なしと判断) | 目的による |
| URLパラメータが存在するか | NULL・"0"で誤検知の可能性 | TRUE(パラメータがある) | isset()が正解 |
| 配列の要素が空かどうか | TRUE(正しく空検知) | 要素が存在するかのみ判定 | empty()が正解 |
📚 用語解説
NULL(ヌル):プログラミングにおいて「値が存在しない・未設定・空」を表す特殊な値。PHPでは未初期化の変数や、DBで値が入っていない(NULL)フィールド、明示的に「null」と代入した変数がこれに該当する。0・false・空文字とは別の概念で、「値すら存在しない状態」を表す。
3-1. URLパラメータのチェックに使う正しい方法
URLパラメータの存在確認(よく見るパターン)
// URL: example.com/page?id=0
// → $_GET['id'] = "0"
// NG: empty()を使うと "0" を空と誤判定する
if (empty($_GET['id'])) {
echo "idがありません"; // ← id=0でも「ない」と判定してしまう
}
// OK: isset()でURLパラメータの存在を確認
if (isset($_GET['id'])) {
echo "id=" . $_GET['id']; // → id=0 が正しく表示される
}
このパターンはWordPressの記事ページや商品ページでよく見られます。「URLパラメータが存在するかどうか」の確認にはisset()が正解で、empty()を使うと「id=0」「page=0」のような「0」が有効なパラメータの場合に誤判定が発生します。
04 COMPARISON TABLE empty・isset・is_null 3関数の完全比較表 全パターンの真偽値を一覧で把握する
PHP開発で混同しやすい3つの関数(empty・isset・is_null)の返り値を、全パターンで比較します。
📚 用語解説
is_null()(イズヌル関数):PHPで変数の値がNULLかどうかを厳密に判定する関数。NULL以外の値(空文字・0・false・未定義など)はFALSEを返す。NULLかどうかだけを確認したい場合に使う。empty()やisset()よりも「NULLに特化した」関数。
| 変数の状態 | empty() | isset() | is_null() |
|---|---|---|---|
| $var = "hello" | FALSE | TRUE | FALSE |
| $var = ""(空文字) | TRUE | TRUE | FALSE |
| $var = 0 | TRUE | TRUE | FALSE |
| $var = "0" | TRUE | TRUE | FALSE |
| $var = false | TRUE | TRUE | FALSE |
| $var = true | FALSE | TRUE | FALSE |
| $var = null | TRUE | FALSE | TRUE |
| $var = [](空配列) | TRUE | TRUE | FALSE |
| $var = [1,2,3] | FALSE | TRUE | FALSE |
| 未定義変数 | TRUE | FALSE | TRUE(警告あり) |
この表から読み取れるポイント:
・フォーム入力の未入力チェック→ empty()(未定義・空文字・NULLを一括チェック)
・URLパラメータ・配列キーの存在確認→ isset()(0も有効な値として扱える)
・DBからのNULL値を厳密に区別したい→ is_null()(NULLのみを検出)
05 WORDPRESS USE CASES WordPressカスタマイズでのempty()活用シーン 実際のWPテーマ・プラグインのコードで登場するパターン
WordPressはPHPで書かれており、テーマのカスタマイズやプラグイン開発でempty()・isset()は必ず登場します。代表的な使用シーンを紹介します。
フォーム・URL
パラメータ
存在確認
パラメータが
あるかチェック
空確認
値が入力済みか
チェック
型・形式・
範囲のチェック
DB保存・
メール送信等
5-1. お問い合わせフォームの入力チェック
WPフォームの入力チェック(Claude Codeがよく生成するパターン)
// お問い合わせフォームの送信処理
if (isset($_POST['submit'])) {
$name = sanitize_text_field($_POST['name'] ?? '');
$email = sanitize_email($_POST['email'] ?? '');
$message = sanitize_textarea_field($_POST['message'] ?? '');
$errors = [];
// 必須項目のチェック(empty()を使用)
if (empty($name)) {
$errors[] = 'お名前を入力してください';
}
if (empty($email)) {
$errors[] = 'メールアドレスを入力してください';
}
if (empty($message)) {
$errors[] = 'お問い合わせ内容を入力してください';
}
if (empty($errors)) {
// エラーがなければメール送信
wp_mail($admin_email, "お問い合わせ: {$name}", $message);
}
}
このコードの読み方:
5-2. カスタムフィールドの値チェック
WPカスタムフィールドの表示制御
// 会社名カスタムフィールドが入力されている場合だけ表示
$company = get_post_meta(get_the_ID(), 'company_name', true);
if (!empty($company)) {
echo '会社名: ' . esc_html($company) . '
';
}
この`!empty($company)`は「companyが空でない場合」を意味します。!(感嘆符)がついたらNOT(否定)なので、「空でない=値が入っている」ときだけ会社名を表示するという処理です。WordPressのテーマやプラグインコードで頻繁に登場するパターンです。
06 CLAUDE CODE READING Claude Codeが生成するPHPスクリプトでの読み方 AI生成コードの中でempty()・isset()を識別する
Claude Codeに「WordPressのフォームを作って」「APIの結果を処理するPHPスクリプトを作って」と依頼すると、必ずといっていいほどempty()やisset()が登場します。生成されたコードを読む際のポイントを整理します。
PHPを依頼
「フォームの
処理を実装して」
コードを確認
empty/isset
を読み取る
「これは入力
チェックだな」
修正指示
「0も有効な
値に対応して」
| コードのパターン | 読み取れること | ビジネス的な意味 |
|---|---|---|
| if (empty($input)) {...} | 入力値が空かチェックしている | フォームの未入力チェック |
| if (!empty($list)) {...} | リストに要素があるかチェック | 対象データが存在する場合の処理 |
| if (isset($_GET["id"])) {...} | URLパラメータが存在するかチェック | IDが指定された場合の処理 |
| if (isset($_POST) && !empty($_POST["name"])) {...} | POSTデータが存在かつ名前が入力済みか | フォーム送信かつ名前入力済み確認 |
| empty($errors) | エラー配列が空かチェック | バリデーション全通過の確認 |
特に注目すべきは「!empty()」(NOTエンプティ)の読み方です。感嘆符(!)が頭についたらその条件を否定するので、「!empty($list)」は「リストが空でない場合」=「リストにデータがある場合」という意味になります。
07 CONCLUSION まとめ|PHPコードを読む力がビジネスに直結する理由 empty()とisset()の理解がWordPressとClaude Code活用の基盤になる
この記事では、PHPのempty()とisset()の違いについて非エンジニア向けに解説しました。ポイントを振り返ります。
「!empty()」「isset()」という関数の読み方を知っているだけで、Claude Codeが生成したWordPressコードの「なぜこの条件判定をしているか」が分かります。コードレビューの精度が上がり、修正指示も具体的になります。
WordPressカスタマイズ・業務システム開発をAI鬼管理が支援
「WordPressのPHPカスタマイズ」「フォーム処理の自動化」「CRMとの連携システム開発」など、Claude Codeを活用した業務システムの設計・開発を支援します。
NEXT STEP
この記事の内容を、あなたのビジネスで
実践してみませんか?
AI活用を自社で回せるようになりたい方へ
AI鬼管理
Claude Code・Cowork導入支援から業務設計・社内浸透まで実践ベースで伴走。「自社で回せる組織」を90日で作る経営者向けトレーニング。
よくある質問
Q. empty()でfalseが「空」と判定されるのはなぜですか?
A. PHPのempty()はPHPの「false(偽)」の判定ルールに基づいており、false・0・""・NULL・[]・"0"が全て「false的な値」として空と見なされます。これはPHPの設計思想で「フォームが送信された」「意味のあるデータが存在する」かどうかを確認するために設計されているためです。
Q. WordPressでempty()とisset()を間違えるとどんな問題が起きますか?
A. 「0」「false」「空文字」を有効な値として扱いたいのにempty()を使うと、それらが誤って「空・未入力」と判定されます。例えば「在庫0個」「価格0円」「無効化フラグ=false」のような値が正しく処理されず、表示・処理の誤りや意図しない制御フローが発生します。
Q. Claude Codeに「フォームを作って」と依頼すればempty()とisset()を適切に使い分けてもらえますか?
A. ほとんどの場合は適切に使い分けてくれますが、完全に信頼するより「0も有効な値として扱う」「URLパラメータの存在確認だけしたい」など、特殊なケースを明示的に伝える方が安全です。生成されたコードを読んで確認できる基礎知識があると、より高品質なコードが得られます。
Q. PHPのempty()はJavaScriptのfalsyな値と同じですか?
A. 似た概念ですが完全には一致しません。JavaScriptのfalsyは0・""・null・undefined・false・NaNが該当しますが、PHPのempty()は"0"(文字列のゼロ)も追加で空と判定します。また未定義変数に対しても、PHPのempty()はエラーを出さずにTRUEを返す一方、JavaScriptはReferenceErrorが発生します。
Q. empty()の代わりにarray_key_exists()を使うべき場面はありますか?
A. あります。配列のキーが存在するかチェックしたい場合、empty($array["key"])はキーが存在しない・値がNULL・値が空の全ての場合にTRUEになります。「キーが存在するかどうか」だけを確認したい場合はarray_key_exists("key", $array)を使う方が正確です。
Q. is_null()をisset()の代わりに使うのは良くないですか?
A. 未定義変数に対してis_null()を使うと警告が出ます(PHP 8.0以降はNotice)。isset()は未定義変数に対してエラーなくFALSEを返すため、変数の定義・NULL確認を同時に行いたい場面ではisset()が安全です。is_null()はすでに定義済みの変数に対してNULLかどうかを厳密に確認したい場合に限定して使います。
Q. 「??」(Null合体演算子)とempty()・isset()の違いは?
A. PHP7以降で使える「??」(Null合体演算子)は「isset()をチェックして、undefinedかNULLなら右辺の値を返す」構文です。「$value = $_GET["id"] ?? "デフォルト"」はisset($_GET["id"]) ? $_GET["id"] : "デフォルト"の短縮形です。empty()とは異なり0や空文字はそのまま返すため、0を有効値として扱えます。
Claude Codeで業務自動化を90日で叩き込む
経営者向けの伴走型パーソナルトレーニング
Claude Code を業務に落とし込む
専門研修コース一覧
受講者本人の業務を題材に、「使いこなせる」状態になるまで伴走する研修プログラム。1対1特化型・ハンズオン・法人講座の3コースを展開中。業務特化・実装まで踏み込むタイプのClaude Code研修です。
研修コース一覧を見る →AI鬼管理へのお問い合わせ
この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。




