PHPでWebアプリケーションを開発していると、フォームから送信されたデータを受け取ったり、データベースの検索結果を扱ったりする際に、「この変数は存在しているのか?」「中身は空ではないか?」を確認したい場面が頻繁に訪れます。
そんな時に欠かせないのが isset() です。
empty() や is_null()、さらには比較的新しい ??(Null合体演算子)なども存在するため、「結局どれを使えばいいの?」と迷ってしまう方も多いでしょう。この記事では、PHPにおける isset() の基本的な挙動から、empty() との決定的な違い、配列や連想配列での正しい使い方、そしてコードを劇的に短くできるNull合体演算子まで、現在の開発現場で役立つ知識をサンプルコード付きで徹底解説します。
![]() 執筆者:マヒロ |
|
- OS:Windows 11 / macOS Sequoia
- IDE:Visual Studio / VS Code / IntelliJ IDEA
- その他:Chrome DevTools / 各言語最新安定版
※本メディアでは、上記環境にてコードの動作と情報の正確性を検証済みです。
isset() とは?基本的な意味と挙動
isset() は、「変数がセットされており(宣言されており)、かつ NULL ではないこと」 を確認するための言語構造(関数のようなもの)です。
判定のルール
isset() が true(真)を返す条件は以下の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や""、false、nullはすべて「空っぽ」とみなして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エンジニアの需要は非常に高く求人数・案件数も多いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。
なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。
転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。
| 年収アップにこだわりたい方 (平均アップ額138万円の実績) | テックゴー |
| 未経験・経験者問わず幅広く探したい方 | ユニゾンキャリア |
| 業界に精通した担当者に相談したい方 | キッカケエージェント |
| ゲーム業界への転職を志望する方 | ファミキャリ |
| エンジニア未経験からキャリアを築く方 | イーチキャリア |



