記事内にはプロモーションが含まれています

【PHP】isset()とは?empty()との違いや配列での使い方などを解説

【PHP】isset()とは?empty()との違いや配列での使い方などを解説 PHP

PHPでWebアプリケーションを開発していると、フォームから送信されたデータを受け取ったり、データベースの検索結果を扱ったりする際に、「この変数は存在しているのか?」「中身は空ではないか?」を確認したい場面が頻繁に訪れます。

そんな時に欠かせないのが isset() です。

しかし、似たような役割を持つ empty()is_null()、さらには比較的新しい ??(Null合体演算子)なども存在するため、「結局どれを使えばいいの?」と迷ってしまう方も多いでしょう。

この記事では、PHPにおける isset() の基本的な挙動から、empty() との決定的な違い、配列や連想配列での正しい使い方、そしてコードを劇的に短くできるNull合体演算子まで、現在の開発現場で役立つ知識をサンプルコード付きで徹底解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はプログラミングスクールを運営
  • モットーは「利他の精神」
💻 本記事の検証環境(2026年2月確認)
  • OS:Windows 11 / macOS Sequoia
  • IDE:Visual Studio / VS Code / IntelliJ IDEA
  • その他:Chrome DevTools / 各言語最新安定版

※本メディアでは、上記環境にてコードの動作と情報の正確性を検証済みです。

isset() とは?基本的な意味と挙動

isset() は、「変数がセットされており(宣言されており)、かつ NULL ではないこと」 を確認するための言語構造(関数のようなもの)です。

判定のルール

isset()true(真)を返す条件は以下の2つが揃った時です。

  1. 変数が定義されていること
  2. 変数の値が null ではないこと

逆に言えば、「変数が存在しない」場合や「値が null」の場合は false(偽)を返します。

基本的なサンプルコード

<?php
$a = "Hello";
$b = null;

// 変数が定義され、値がある場合
if (isset($a)) {
    echo '$a はセットされています。' . "\n";
}

// 変数は定義されているが、値が null の場合
if (isset($b)) {
    echo '$b はセットされています。';
} else {
    echo '$b はセットされていません(nullです)。' . "\n";
}

// 変数が定義されていない場合
if (isset($c)) {
    echo '$c はセットされています。';
} else {
    echo '$c はセットされていません(未定義です)。' . "\n";
}
?>

実行結果

$a はセットされています。
$b はセットされていません(nullです)。
$c はセットされていません(未定義です)。

$b はコード上で null を代入して定義していますが、isset()false を返します。

これが isset() の最大の特徴であり、注意点でもあります。

「値が入っているかどうか」を確認するためのものだと理解しましょう。

間違いやすい!isset() と empty() の違い

PHPには変数の状態をチェックする関数として empty() もよく使われますが、isset() とは判定基準が明確に異なります。
ここを混同するとバグの原因になります。

違いの比較表

関数 判定内容 0 や空文字 (“”) の扱い null の扱い 未定義変数の扱い
isset() 定義済み かつ NULLではない true (値ありとみなす) false false
empty() 空である、または 0 や false true (空とみなす) true true

決定的な違い

  • isset()0""(空文字)、false は「値がセットされている」とみなして true を返します。
  • empty()0""falsenull はすべて「空っぽ」とみなして true を返します。

使い分けのポイント

  • 「データが存在するかどうか」 を厳密に知りたい場合(0も有効な値として扱いたい場合など)は isset() を使います。
  • 「入力欄が空かどうか」 をざっくりチェックしたい場合(0や空文字もNGとしたい場合)は empty() が便利です。

配列や連想配列での isset() の使い方

実務では、$_POST$_GET といった配列(連想配列)の中に、特定のキーが存在するかどうかを確認するために isset() が頻繁に使われます。

配列のキー存在チェック

<?php
$user = [
    'name' => 'Tanaka',
    'age'  => 25,
    'city' => null
];

// キー 'name' の存在チェック
if (isset($user['name'])) {
    echo "名前は " . $user['name'] . " です。\n";
}

// キー 'city' の存在チェック(値が null なので false になる!)
if (isset($user['city'])) {
    echo "都市は " . $user['city'] . " です。\n";
} else {
    echo "都市は設定されていません(またはnull)。\n";
}

// 存在しないキー 'email' のチェック
if (isset($user['email'])) {
    echo "メールアドレスあり";
} else {
    echo "メールアドレスなし";
}
?>

実行結果

名前は Tanaka です。
都市は設定されていません(またはnull)。
メールアドレスなし

【注意】値が null のキーをチェックする場合

上記の例で $user['city'] はキーとして存在していますが、値が null なので isset()false を返しました。

もし「値が null でもいいから、キーが存在するかどうかだけを知りたい」という場合は、array_key_exists() 関数を使う必要があります。

if (array_key_exists('city', $user)) {
    echo "cityキーは存在します(値はnullかもしれません)。";
}

複数の変数をまとめてチェックする方法

isset() は複数の引数を取ることができます。この場合、「すべての変数がセットされている場合のみ true」を返します(AND条件)。

<?php
$a = 1;
$b = 2;
$c = null;

// すべてセットされているか?
if (isset($a, $b)) {
    echo "aとbはセットされています。\n";
}

if (isset($a, $b, $c)) {
    echo "aとbとcはセットされています。";
} else {
    echo "どれか(または全て)がセットされていません。\n";
}
?>

フォーム入力ですべての必須項目が送信されているかを確認する際などに便利です。

モダンな書き方:Null合体演算子(??)の活用

PHP 7.0以降では、isset() を使った三項演算子の書き方を、Null合体演算子 ?? を使って劇的に短く書けるようになりました。
現在では、こちらが主流の書き方です。

従来の書き方(isset + 三項演算子)

// $_GET['id'] があればその値を、なければ 1 を代入
$id = isset($_GET['id']) ? $_GET['id'] : 1;

モダンな書き方(Null合体演算子)

// 同じ処理がこれだけで書ける
$id = $_GET['id'] ?? 1;

?? は「左側の値が存在して null でなければその値を、そうでなければ右側の値を返す」という動作をします。
まさに isset() の代わりとして機能します。

PHPのスキルを活かして年収を上げる方法

以上、PHPのisset()とは何かについて解説してきました。

なお、PHPのスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。

PHPエンジニアの需要は非常に高く求人数・案件数も多いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。

なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。
今すぐ転職する気がなくとも、とりあえず転職エージェントに無料登録しておくだけで、スカウトが届いたり、思わぬ好待遇の求人情報が送られてきたりするというメリットがあります。
併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなPHPの案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。
エンジニアのキャリア・スキルアップ相談窓口
当ブログの読者に選ばれている、実績豊富な転職エージェントを厳選しました。
【転職】年収・環境を改善したい
年収アップにこだわりたい方 (平均アップ額138万円の実績)
未経験・経験者問わず幅広く探したい方
業界に精通した担当者に相談したい方
ゲーム業界への転職を志望する方
エンジニア未経験からキャリアを築く方
【独立】フリーランスとして稼ぎたい
国内最大級のフリーランス案件数から比較したい方
週1〜3日など柔軟な働き方を希望する方
【学習】スキルに不安のある方向け(格安スクール「デイトラ」)