PHPのissetとは
PHPのisset()は、変数が宣言されていて、かつ値がnullではないかを確認するための言語構造です。
フォームから送信された値の確認や、配列キーの存在チェック、未定義変数へのアクセス回避など、PHPでは非常によく使われます。
見た目は関数のようですが、厳密には通常の関数ではなく、PHPの言語構造です。
issetの基本的な書き方
基本的な書き方は次のとおりです。
isset($variable);
条件を満たす場合はtrue、満たさない場合はfalseを返します。
たとえば、変数に文字列が代入されている場合はtrueになります。
$name = 'Taro';
var_dump(isset($name));
実行結果は次のとおりです。
bool(true)
一方、変数の値がnullの場合はfalseになります。
$name = null;
var_dump(isset($name));
実行結果は次のとおりです。
bool(false)
つまり、isset()は単純に「変数が宣言されているか」だけではなく、「宣言されていて、値がnullではないか」を確認するものです。
issetの基本的な使い方
変数が設定されているか確認する
isset()の代表的な使い方は、変数が利用できる状態かどうかを確認することです。
$message = 'Hello';
if (isset($message)) {
echo $message;
}
この場合、$messageは宣言されていて、値もnullではないため、Helloが表示されます。
未定義の変数に対しても、安全に確認できます。
if (isset($message)) {
echo $message;
}
$messageが宣言されていない場合は、isset($message)がfalseになります。
未定義変数を直接参照すると警告が発生する可能性がありますが、isset()を使えば存在確認を安全に行えます。
issetで配列のキーを確認する方法
isset()は、配列に特定のキーが存在し、その値がnullではないかを確認するときにもよく使われます。
$user = [
'name' => 'Taro',
'age' => 30,
];
if (isset($user['name'])) {
echo $user['name'];
}
この場合、nameキーが存在し、値もnullではないため、Taroが表示されます。
存在しない配列キーを確認する場合
次のように、存在しないキーを指定した場合はfalseになります。
$user = [
'name' => 'Taro',
];
var_dump(isset($user['email']));
実行結果は次のとおりです。
bool(false)
存在しない配列キーを直接参照するのではなく、あらかじめisset()で確認することで、安全に処理できます。
ネストした配列にも使用できる
isset()は、階層が深い配列の確認にも利用できます。
if (isset($data['user']['profile']['name'])) {
echo $data['user']['profile']['name'];
}
途中のキーが存在しない場合でも、存在確認として使用できます。
issetはnullの場合にfalseになる
isset()を理解するうえで特に重要なのが、値がnullの場合はfalseになるという点です。
たとえば、次の配列を考えてみましょう。
$user = [
'name' => null,
];
nameというキー自体は存在しています。
しかし、次の結果はfalseになります。
var_dump(isset($user['name']));
bool(false)
これは、isset()が「キーが存在するか」だけではなく、「キーが存在し、その値がnullではないか」まで確認しているためです。
issetとarray_key_existsの違い
配列のキーを確認するときに、isset()とよく比較されるのがarray_key_exists()です。
nullの扱いが異なる
両者の最大の違いは、値がnullの場合です。
$user = [
'name' => null,
];
var_dump(isset($user['name']));
var_dump(array_key_exists('name', $user));
実行結果は次のようになります。
bool(false)
bool(true)
isset()は、値がnullであるためfalseになります。
一方、array_key_exists()は値に関係なく、キーそのものが存在していればtrueを返します。
そのため、使い分けの目安は次のとおりです。
- キーが存在し、値が
nullではないか確認したい場合はisset() nullかどうかに関係なくキーの存在自体を確認したい場合はarray_key_exists()
issetとemptyの違い
isset()と混同されやすい言語構造としてempty()があります。
issetはnullかどうかを確認する
isset()は、変数が宣言されていて、値がnullではない場合にtrueになります。
emptyは空とみなされる値か確認する
一方、empty()は、値がPHPで「空」とみなされる場合にtrueを返します。
たとえば、次のコードを確認してみましょう。
$value = 0;
var_dump(isset($value));
var_dump(empty($value));
実行結果は次のとおりです。
bool(true)
bool(true)
$valueには0が代入されているため、変数は存在し、値もnullではありません。
そのため、isset()ではtrueになります。
一方、0はempty()で空とみなされる値なので、empty()もtrueになります。
emptyで空とみなされる主な値
代表的には、次のような値がempty()でtrueになります。
0
0.0
'0'
''
null
false
[]
そのため、「変数が宣言されていて、nullではないか」を確認する場合はisset()、「値が空とみなされるか」を確認する場合はempty()という違いを理解しておくことが重要です。
issetでは空文字や0もtrueになる
isset()は、値が空かどうかを判定するものではありません。
たとえば、空文字の場合でもtrueになります。
$value = '';
var_dump(isset($value));
実行結果は次のとおりです。
bool(true)
同様に、次のような値でもisset()はtrueになります。
$value = 0;
$value = false;
$value = [];
いずれもnullではないためです。
空文字まで確認したい場合
文字列が設定されていて、さらに空文字ではないことまで確認したい場合は、別の条件を組み合わせます。
if (isset($name) && $name !== '') {
// 値が設定されていて、空文字ではない
}
isset()だけでは「ユーザーが実際に文字を入力したか」までは判断できない点に注意しましょう。
issetで複数の変数を確認する方法
isset()には、複数の変数を指定できます。
$name = 'Taro';
$age = 30;
if (isset($name, $age)) {
echo '両方の値が設定されています';
}
指定した変数がすべて宣言されていて、すべてnullではない場合にtrueになります。
たとえば、片方がnullの場合はfalseです。
$name = 'Taro';
$age = null;
var_dump(isset($name, $age));
実行結果は次のとおりです。
bool(false)
複数の入力値や設定値がそろっているか確認したい場合に便利です。
issetをフォーム処理で使用する方法
PHPでは、HTMLフォームから送信されたデータの確認にもisset()がよく使われます。
たとえば、POST送信されたnameを確認する場合は次のように書けます。
if (isset($_POST['name'])) {
echo $_POST['name'];
}
これにより、$_POST['name']が存在しない状態で直接アクセスすることを避けられます。
issetだけでは入力内容の有無までは確認できない
注意したいのは、次のような空文字でもisset()はtrueになることです。
$_POST['name'] = '';
そのため、必須項目として入力されているかまで確認したい場合は、別の条件を組み合わせる必要があります。
if (isset($_POST['name']) && $_POST['name'] !== '') {
echo '名前が入力されています';
}
実際のフォーム処理では、必要に応じて入力値の検証も行いましょう。
HTMLに表示するときはエスケープ処理も行う
フォームから受け取った値をHTMLとして画面に出力する場合、isset()による存在確認だけでは十分ではありません。
出力する場所に応じて、適切なエスケープ処理を行う必要があります。
HTML本文などに出力する場合は、htmlspecialchars()を使用できます。
if (isset($_POST['name'])) {
echo htmlspecialchars(
$_POST['name'],
ENT_QUOTES,
'UTF-8'
);
}
isset()はあくまで値の存在確認を行うものであり、セキュリティ対策そのものではない点を理解しておきましょう。
issetとnull合体演算子の関係
PHP 7以降では、isset()と三項演算子を組み合わせた処理を、null合体演算子??で簡潔に書けます。
issetと三項演算子を使う場合
従来は次のようなコードを書くことができました。
$name = isset($_GET['name'])
? $_GET['name']
: 'Guest';
null合体演算子を使う場合
??を使えば、次のように短く書けます。
$name = $_GET['name'] ?? 'Guest';
$_GET['name']が存在し、nullではなければその値が使われます。
存在しない、またはnullの場合は、右側の'Guest'が使用されます。
フォーム値や設定値にデフォルト値を設定する場面で便利です。
issetではnullと未定義を区別できない
isset()には、nullが代入されている状態と、変数自体が未定義の状態を区別できないという特徴があります。
たとえば、
$value = null;
の場合も、
// $value自体が未定義
の場合も、
var_dump(isset($value));
ではfalseになります。
配列キーの有無を区別したい場合
配列について、「キーは存在するが値がnullなのか」「キー自体が存在しないのか」を区別したい場合は、array_key_exists()を利用します。
$data = [
'name' => null,
];
var_dump(isset($data['name']));
var_dump(array_key_exists('name', $data));
実行結果は次のとおりです。
bool(false)
bool(true)
この違いは、APIレスポンスや設定データなどを扱う際にも重要です。
issetを使う際の注意点
issetは通常の関数ではない
isset()は見た目こそ関数に似ていますが、厳密にはPHPの言語構造です。
PHPの通常のユーザー定義関数などとは扱いが異なるため、「PHPの組み込み関数」とだけ説明するよりも、「言語構造」と理解しておくほうが正確です。
定数の存在確認にはdefinedを使う
isset()は変数の確認に使用します。
定数が定義されているか確認したい場合は、defined()を使用します。
if (defined('APP_NAME')) {
echo APP_NAME;
}
変数と定数では、存在確認に使用する方法が異なる点に注意しましょう。
オブジェクトでは__issetが呼び出される場合がある
クラスでアクセスできないプロパティに対してisset()を使用すると、__isset()というマジックメソッドが定義されている場合に呼び出されることがあります。
isset($object->property);
初心者が通常の変数や配列を扱う場合には意識する必要はほとんどありませんが、オブジェクト指向のPHPを扱うようになると知っておくと役立ちます。
PHPのissetを理解して安全に変数を扱おう
PHPのisset()は、変数が宣言されていて、なおかつ値がnullではないかを確認するための言語構造です。
変数だけでなく、配列のキーやフォームから送信された値などを安全に確認するために幅広く使用されます。
特に重要なのは、isset()では値がnullの場合にfalseになる一方、空文字''、数値の0、falseなどはnullではないためtrueになる点です。
また、array_key_exists()やempty()とは判定基準が異なります。
配列キーが存在し、値がnullではないことを確認したい場合はisset()、値がnullでもキー自体の存在を確認したい場合はarray_key_exists()、値がPHPで空とみなされるかを確認したい場合はempty()と使い分けるとよいでしょう。
isset()の特徴と他の判定方法との違いを理解しておけば、未定義変数や存在しない配列キーによる問題を防ぎながら、より安全で分かりやすいPHPコードを書けるようになります。
以上、PHPのissetとはなんなのかについてでした。
最後までお読みいただき、ありがとうございました。









