まえがき
PHPで頻繁に使われる isset() 関数ですが、
0や空文字はtrue?- 配列キーが存在するのに
falseになるのはなぜ? empty()やarray_key_exists()とはどう違う?
といった点で混乱する人は少なくありません。
この記事では、isset() が true / false を返す正確な条件 を具体例ベースで整理し、
実務で「どこで使うべきか」「使ってはいけないケース」を分かりやすく解説します。
サンプルコードは PHP Playground でそのまま実行できます。
isset()関数とは?
isset() は、変数が定義されており、かつ null でないか を判定する関数です。
isset($variable);
- 条件を満たす →
true - それ以外 →
false
値が「空」かどうかは判定しません。ここが最大の誤解ポイントです。
基本例(ここはおさらい)
<?php
$var = "Hello";
if (isset($var)) {
echo "$var がセットされています。";
}
Hello がセットされています。
isset()でよくある勘違い【重要】
① 0 や空文字は false? → ❌ true
<?php
$var = 0;
var_dump(isset($var)); // true
$var = '';
var_dump(isset($var)); // true
値が入っていれば true。中身が「空っぽに見えても」関係ありません。
② null はどうなる? → false
<?php
$var = null;
var_dump(isset($var)); // false
isset() は null を最重要視 します。
③ 配列キーが存在するのに false になるケース
<?php
$data = ['key' => null];
var_dump(isset($data['key'])); // false
var_dump(array_key_exists('key', $data)); // true
この挙動は初心者が必ず一度はハマります。
isset()→ null かどうかを見るarray_key_exists()→ キーの存在だけを見る
複数変数をまとめてチェックする
<?php
$var1 = 'Hello';
$var2 = null;
if (isset($var1, $var2)) {
echo '両方OK';
} else {
echo 'どちらかが null';
}
どちらかが null
1つでも null があれば false になります。
実務での使いどころ
フォーム送信チェック(最低限)
<?php
if (isset($_POST['username'])) {
echo 'ユーザー名: ' . $_POST['username'];
}
未定義 Notice を防ぐ目的 では有効。
JSON / APIレスポンスのチェック
<?php
if (isset($response['data'])) {
// data が null でない場合のみ処理
}
isset / empty / array_key_exists の違い(超重要)
| 関数 | null | 0 | '' | false | キー存在 | 主な用途 |
|---|---|---|---|---|---|---|
| isset | ❌ | ⭕ | ⭕ | ⭕ | ❌(null時) | nullチェック |
| empty | ⭕ | ⭕ | ⭕ | ⭕ | ❌ | 空判定 |
| array_key_exists | ⭕ | ⭕ | ⭕ | ⭕ | ⭕ | 配列キー確認 |
用途を間違えるとバグの温床になります。
isset()を使ってはいけないケース
- 「値が空かどうか」を判定したい
- 配列キーの存在だけを知りたい
- 0 や false を NG にしたい
この場合は empty() や厳密比較を使いましょう。
まとめ
isset()は null 判定専用 と考える- 空文字・0・false は true
- 配列キーの存在確認には不向き
- 実務では Notice回避 + null防止 が主用途
isset() と empty() の違いをさらに詳しく知りたい方は、
以下の記事もあわせて読むのがおすすめです。
PHPのisset()とempty():初心者向けの使い分けガイド
スポンサーリンク