PHPのissetの使い方: 変数がセットされているか調べる

46, 2020-09-14

目次

PHPのissetの使い方

PHPには変数がセットされているかどうか調べるissetという関数があります。
これを使うと変数がセット済みの変数かどうか調べることが可能です。

issetは↓のようにして使います。

<?php

if (isset($var)) {
    echo "セット済み\n";
} else {
    echo "未セット\n";
}

?>

出力結果。

未セット

PHPの対応バージョン

issetは以下のバージョンのPHPで使うことができます。

  • PHP 4

  • PHP 5

  • PHP 7

issetの構造

issetは↓のような構造を持っています。

isset(変数1, 変数2, 変数n...);

引数

issetの引数には変数を渡します。
issetはこの変数がセットされているか評価し、セットされていればTRUE, セットされていなければFALSEを返します。

引数には複数の変数を渡すことができます。
複数の変数を渡した場合、issetは第1引数から順に変数を評価していきます。
セットされていない変数を評価した時点で、それ以降の評価をストップし、FALSEを返します。

返り値

返り値の型はbooleanです。
引数の変数がセットされていればTRUE, セットされていなければFALSEを返します。

issetの「セット」の定義

issetにおける「セットされている」の定義は↓の通りです。

  • 変数が定義されている

  • 変数にNULLが代入されていない

変数が定義されていてもNULLが代入されている場合はissetFALSEを返します。

<?php

$var = NULL;

if (isset($var)) {
    echo "セット済み\n";
} else {
    echo "未セット\n";
}

?>

出力結果。

未セット

セットされている変数を調べる

定義されている変数をissetに渡すとTRUEが返ります。

<?php

$var = 1;

if (isset($var)) {
    echo "セット済み\n";
} else {
    echo "未セット\n";
}

?>

出力結果。

セット済み

複数の変数を調べる

複数の変数を調べるには引数にカンマ(,)区切りで変数を渡します。

<?php

$a = 1;
$b = 1;
$c = NULL;

if (isset($a, $b, $c)) {
    echo "セット済み\n";
} else {
    echo "未セット\n";
}

?>

出力結果。

未セット

変数$a, $bはセットされていますが、$cにはNULLが代入されているので、最後の$cの評価で結果はFALSEになり「未セット」と表示されます。

未定義の変数はFALSE

宣言されていても未定義(Undefined)な変数はFALSEになります。

<?php

$var;

if (isset($var)) {
    echo "セット済み\n";
} else {
    echo "未セット\n";
}

?>

出力結果。

未セット

NULL文字はTRUE

NULL文字(\0)に対してはissetTRUEを返します。

<?php

$var = '\0';

if (isset($var)) {
    echo "セット済み\n";
} else {
    echo "未セット\n";
}

?>

出力結果。

セット済み

空文字列はTRUE

空文字列に対してもissetTRUEを返します。

<?php

$var = '';

if (isset($var)) {
    echo "セット済み\n";
} else {
    echo "未セット\n";
}

?>

出力結果。

セット済み

文字列の未定義の要素はFALSE

PHP5.4.0から文字列のオフセットに非数値を指定した場合、issetFALSEを返します。

<?php

$var = 'abc';

var_dump(isset($var[0]));  // 数値
var_dump(isset($var['1']));  // 文字列だけど数値
var_dump(isset($var['a']));  // 非数値

?>

出力結果。

bool(true)
bool(true)
bool(false)

連想配列を調べる

連想配列も定義されている要素はTRUEです。しかしNULLが代入されている場合はFALSEになります。

<?php

$var = ['cat' => 'nyan', 'dog' => NULL];

var_dump(isset($var['cat']));
var_dump(isset($var['dog']));
var_dump(isset($var['bird']));

?>

出力結果。

bool(true)
bool(false)
bool(false)

値を直接渡すとエラー

issetには変数は渡せますが、値を直接渡すことはできません。
↓のようにエラーになります。

<?php

isset(1);

?>
PHP Fatal error:  Cannot use isset() on the result of an expression (you can use "null !== expression" instead) in sample.php on line 3

issetと関連の深い関数

issetと関連の深い関数は↓の通りです。

問題

Q1: issetに渡せる変数の数として適当なものを答えよ

  1. 1個

  2. 2個

  3. 複数

Q2: issetNULLが代入された変数を渡すとどうなるか答えよ

  1. TRUEが返る

  2. FALSEが返る

  3. エラーになる

Q3: issetに宣言のみされた変数を渡すとどうなるか答えよ

  1. TRUEが返る

  2. FALSEが返る

  3. エラーになる


正解

Q1: 3
Q2: 2
Q3: 2