PHPのisset()とは?true/falseの判定ルールと実務でハマりやすいポイント

まえがき

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 の違い(超重要)

関数null0''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():初心者向けの使い分けガイド


スポンサーリンク

もふもふ

プロフィール

著者
もふもふ
プログラマ。汎用系→ゲームエンジニア→Webエンジニア→QAエンジニア。開発からテストまで一通り経験し、実際に詰まった点や検証結果を技術ブログとしてまとめています。