PHPのempty()とisset()の違いをわかりやすく解説|WordPressカスタマイズで使うPHP基礎

PHPのempty()とisset()の違いをわかりやすく解説|WordPressカスタマイズで使うPHP基礎

「WordPressのPHPコードを見ると、empty()とisset()が頻繁に登場するが、何が違うのか分からない」——そんな疑問を抱えている方は多いはずです。

PHPは世界で最も広く使われているサーバーサイド言語の一つで、特にWordPressのテーマ・プラグインのほぼ全ての部分がPHPで書かれています。経営者として自社のWordPressサイトをカスタマイズしたり、Claude Codeにシステム改修を依頼したりする場面で、PHPコードの基本が読めると判断の質が上がります。

この記事では、PHPの中でも特に混同しやすいempty()とisset()の違いを非エンジニアの方に向けて解説します。「コードを書けるようになる」のではなく、「Claude Codeが生成したPHPコードの意図を読み取れるようになる」ことを目標にします。

代表菅澤 代表菅澤
弊社のWordPressサイトのカスタマイズをClaude Codeに依頼すると、必ずといっていいほどempty()やisset()が登場します。最初は意味が全く分かりませんでしたが、「これは変数が空かどうかをチェックしているんだな」と理解できるようになると、コードレビューの質が格段に変わりました。
AI鬼管理山崎 AI鬼管理山崎
PHPのempty()とisset()は混同しやすい関数ですが、使い分けの法則は非常にシンプルです。一度理解すれば、WordPressのコードを見るとき「この変数チェックは何をしているのか」がすぐ分かります。

この記事で得られること:

✔️empty()とisset()の決定的な違い——特にNULLの扱いの差
✔️「空」と判定される8つのパターン——0・false・空文字・NULLは全部「空」?
✔️empty・isset・is_nullの3関数の完全比較
✔️WordPressカスタマイズでempty()がどこに・なぜ使われるか
✔️Claude Codeが生成するPHPコードを読んで意図が分かるようになる
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理
📌 この記事の結論
PHPのempty()とisset()の違いをわかりやすく解説|WordPressカスタマイズで使うPHP基礎
PHPのempty()とisset()の違いを非エンジニア向けに解説。WordPressのカスタマイズやClaude CodeのPHPスクリプト読解に必要なPHP基礎知識を分かりやすく整理します。

01 PHPのempty()とisset()の基本——何を判定するのか 結論から言うと「空かどうか」と「存在かつ非NULLか」の違い

まず結論をシンプルに整理します。

関数判定内容返り値(TRUE)の条件
empty($var)変数が「空」かどうか変数が空・0・NULL・false・[]・"0"などの場合TRUE
isset($var)変数が存在して、NULLでないか変数が定義されていてNULLでない場合TRUE

日常の言葉に置き換えると:

✔️empty():「この箱に使えるものが入っているか?(空っぽかどうか)」を確認する
✔️isset():「この箱が存在するか?(棚にあるかどうか)」を確認する

📚 用語解説

empty()(エンプティ関数):PHPで変数やデータが「空の状態」かどうかを判定する関数。空文字""・数値0・false・NULL・空配列[]・"0"などを「空」と見なしてTRUEを返す。フォーム入力の未入力チェックや配列の空チェックで頻繁に使われる。

📚 用語解説

isset()(イズセット関数):PHPで変数が「セット(定義)されていてNULLでない」かどうかを判定する関数。変数が存在してNULL以外の値を持つ場合TRUE。変数が未定義・NULLの場合FALSE。GETパラメータ・POSTデータの存在確認でよく使われる。

この2つの違いが最もよく出るのは「NULLの扱い」です。NULLはデータが「存在しない・未設定」を表す特殊な値ですが、empty()とisset()では正反対の判定をします。

変数の状態empty()の結果isset()の結果
$var = NULLTRUE(空と判定)FALSE(存在しない・NULL)
$var = ""(空文字)TRUE(空と判定)TRUE(存在する・NULLでない)
$var = 0TRUE(空と判定)TRUE(存在する・NULLでない)
$var = "hello"FALSE(空でない)TRUE(存在する)
$var = [](空配列)TRUE(空と判定)TRUE(存在する)
未定義変数TRUE(空と判定)FALSE(存在しない)

02 empty()の動作詳細——「空」と判定される8つのパターン 「空」と見なされる値の全パターンを把握する

empty()がTRUE(空と判定)を返す値は以下の8種類です。これを把握しておくと、コードを読んだときに「この条件がTRUEになるのはどういうケースか」が即座に分かります。

TRUEになるか具体例注意点
NULLTRUE$var = null最も多い「空」パターン
""(空文字)TRUE$var = ""フォームで何も入力しなかった状態
0(数値ゼロ)TRUE$var = 0「値が入力された」が判定できない
"0"(文字列ゼロ)TRUE$var = "0""0"を有効な入力と認識できない
falseTRUE$var = falseブール値のfalse
[](空配列)TRUE$var = []配列が空かどうかのチェックに最適
未定義変数TRUE(変数自体がない)エラーが出ないのでissetより安全
0.0(浮動小数ゼロ)TRUE$var = 0.0数値計算に注意
⚠️ empty()で「0」が空と判定される問題

「在庫数=0個」「価格=0円」「評価スコア=0点」のような「0」は意味のある値です。しかしempty()はこれらを全て「空」と判定します。フォームの「入力チェック」や「0を有効な値として扱いたい場面」では、empty()ではなくisset()または専用のバリデーション(入力検証)を使う必要があります。

逆に、empty()がFALSE(空でないと判定)を返す場合:

✔️空でない文字列("hello"・"true"・"false"など)
✔️1以上または-1以下の数値
✔️TRUEのブール値
✔️1件以上の要素が入った配列
✔️オブジェクト(データの集合体)

📚 用語解説

バリデーション(Validation):ユーザーが入力したデータが正しい形式・範囲・値かどうかを検証するプロセス。PHPでは「必須項目が空でないか(empty)」「変数が存在するか(isset)」「数値範囲が正しいか」などをチェックする。WordPressのフォーム処理やAPIのリクエスト処理で必ず実施する安全対策の一つ。

💡 empty()の最適な使い場面

empty()が最も力を発揮するのは「フォームの未入力チェック」です。ユーザーが何も入力せずに送信した場合、POSTデータは空文字または未定義になります。empty()を使うことで、「未定義」「空文字」「NULL」の全パターンを一括でチェックできます。isset()だけでは空文字入力を見落とすリスクがあります。

03 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」が有効なパラメータの場合に誤判定が発生します。

Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

04 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"FALSETRUEFALSE
$var = ""(空文字)TRUETRUEFALSE
$var = 0TRUETRUEFALSE
$var = "0"TRUETRUEFALSE
$var = falseTRUETRUEFALSE
$var = trueFALSETRUEFALSE
$var = nullTRUEFALSETRUE
$var = [](空配列)TRUETRUEFALSE
$var = [1,2,3]FALSETRUEFALSE
未定義変数TRUEFALSETRUE(警告あり)

この表から読み取れるポイント:

✔️empty()だけが「0」「false」「空文字」を全て「空」と見なす
✔️isset()だけがNULLを「存在しない」として使える変数と区別する
✔️is_null()だけがNULLかどうかを厳密にチェックする(未定義変数では警告)
✔️空文字("")と"0"の区別が必要な場合は、empty()では不十分——別途判定が必要
💡 実務での選び方の基準

フォーム入力の未入力チェック→ empty()(未定義・空文字・NULLを一括チェック)
URLパラメータ・配列キーの存在確認→ isset()(0も有効な値として扱える)
DBからのNULL値を厳密に区別したい→ is_null()(NULLのみを検出)

05 WordPressカスタマイズでのempty()活用シーン 実際のWPテーマ・プラグインのコードで登場するパターン

WordPressはPHPで書かれており、テーマのカスタマイズやプラグイン開発でempty()・isset()は必ず登場します。代表的な使用シーンを紹介します。

ユーザー入力
フォーム・URL
パラメータ
isset()で
存在確認

パラメータが
あるかチェック
empty()で
空確認

値が入力済みか
チェック
バリデーション
型・形式・
範囲のチェック
処理実行
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);
    }
}

このコードの読み方:

✔️if (isset($_POST["submit"])):フォームが送信されたかどうかを確認
✔️empty($name):名前が未入力かチェック(TRUEならエラーリストに追加)
✔️empty($errors):エラーが0件かチェック(エラーなしなら処理を実行)
✔️isset()でフォーム送信の確認、empty()で各フィールドの入力チェックという役割分担

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が生成するPHPスクリプトでの読み方 AI生成コードの中でempty()・isset()を識別する

Claude Codeに「WordPressのフォームを作って」「APIの結果を処理するPHPスクリプトを作って」と依頼すると、必ずといっていいほどempty()やisset()が登場します。生成されたコードを読む際のポイントを整理します。

Claude Codeに
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)」は「リストが空でない場合」=「リストにデータがある場合」という意味になります。

AI鬼管理山崎 AI鬼管理山崎
Claude Codeが生成したPHPコードで「if (!empty($xxx))」という形を見たら「xxxに値が入っている場合に実行する」と読んでください。条件の「逆」が意図の核心です。
代表菅澤 代表菅澤
弊社ではClaude Codeに「0円の場合も表示するようにして」と修正指示を出したとき、empty()をisset()に変えてくれました。この違いを知っているから「正しい修正になっているな」と確認できました。知識があると信頼性チェックができます。
Claude Code 完全解説セミナー|経営者・会社役員専用 1on1 60分 無料Claude Codeを経営に活かしたい方へ — AI鬼管理

07 まとめ|PHPコードを読む力がビジネスに直結する理由 empty()とisset()の理解がWordPressとClaude Code活用の基盤になる

この記事では、PHPのempty()とisset()の違いについて非エンジニア向けに解説しました。ポイントを振り返ります。

✔️empty()は「変数が空か」、isset()は「変数が存在かつ非NULLか」を判定する
✔️最大の違いはNULLの扱い——empty()はNULLを「空」、isset()はNULLを「存在しない」と判定
✔️「0」を有効な値として扱いたい場合はempty()は使えない(0も空と判定する)
✔️フォームの未入力チェックにはempty()、URLパラメータの存在確認にはisset()が適切
✔️WordPressのテーマ・プラグインでは両方が頻繁に登場——読み方を知ることでコードの意図が分かる
✔️Claude Codeへの修正指示も、empty()とisset()の違いを理解することで具体的・正確になる

「!empty()」「isset()」という関数の読み方を知っているだけで、Claude Codeが生成したWordPressコードの「なぜこの条件判定をしているか」が分かります。コードレビューの精度が上がり、修正指示も具体的になります。

WordPressカスタマイズ・業務システム開発をAI鬼管理が支援

「WordPressのPHPカスタマイズ」「フォーム処理の自動化」「CRMとの連携システム開発」など、Claude Codeを活用した業務システムの設計・開発を支援します。

代表菅澤 代表菅澤
「PHPの知識がないと業者に丸投げするしかなかった」という状況から、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を有効値として扱えます。

AIAI鬼管理

AI鬼管理へのお問い合わせ

この記事を読んで気になった方へ。
AI鬼管理の専門スタッフが、御社に最適な
業務自動化プランを無料でご提案します。

会社名を入力してください
業種を選択してください
お名前を入力してください
正しいメールアドレスを入力してください

1つ以上選択してください
1つ以上選択してください
月額コストを選択してください

約1時間のオンライン面談(Google Meet)です

空き枠を取得中...
面談日時を選択してください

予約確定後、Google Calendarの招待メールをお届けします。
しつこい営業は一切ございません。

監修 最終更新日: 2026年7月13日
菅澤孝平
菅澤 孝平 株式会社GENAI 代表取締役
  • AI業務自動化サービス「AI鬼管理」を運営 — Claude Code を活用し、経営者の業務を「AIエージェントに任せる仕組み」へ転換するパーソナルトレーニングを 伴走構築 で提供。日報・採用・問い合わせ対応・経費精算・議事録・データ集計・営業リスト等の定型業務を、AIに代行させる体制を経営者と一緒に作り込む
  • Claude Code 実装ノウハウを 経営者・法人クライアント に直接指導。生成AIを「便利ツール」ではなく 「業務を任せる存在」 として運用する手法を体系化
  • 「やらせ切る管理」メソッドの開発者。シンゲキ株式会社(2021年設立・鬼管理専門塾運営)にて累計3,000名以上の学習者を志望校合格に導いた管理メソッドを、AI × 経営者支援 に転用
  • 著書『3カ月で志望大学に合格できる鬼管理』(幻冬舎)、『親の過干渉こそ、最強の大学受験対策である。』(講談社)
  • メディア出演: REAL VALUE / カンニング竹山のイチバン研究所 / ええじゃないかBiz 他
  • 明治大学政治経済学部卒
現在は AI鬼管理(Claude Code活用の伴走型パーソナルトレーニング)を主事業とし、経営者と二人三脚で「AIに業務を任せる仕組み」を実装。「実行を強制する環境」を AI で構築する手法を、自社の実運用知見をもとに発信している。