PHPのissetの使い方: 変数がセットされているか調べる
目次
- PHPのissetの使い方
- PHPの対応バージョン
- issetの構造
- issetの「セット」の定義
- セットされている変数を調べる
- 複数の変数を調べる
- 未定義の変数はFALSE
- NULL文字はTRUE
- 空文字列はTRUE
- 文字列の未定義の要素はFALSE
- 連想配列を調べる
- 値を直接渡すとエラー
- issetと関連の深い関数
- 問題
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
が代入されている場合はisset
はFALSE
を返します。
<?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
)に対してはisset
はTRUE
を返します。
<?php $var = '\0'; if (isset($var)) { echo "セット済み\n"; } else { echo "未セット\n"; } ?>
出力結果。
セット済み
空文字列はTRUE
空文字列に対してもisset
はTRUE
を返します。
<?php $var = ''; if (isset($var)) { echo "セット済み\n"; } else { echo "未セット\n"; } ?>
出力結果。
セット済み
文字列の未定義の要素はFALSE
PHP5.4.0
から文字列のオフセットに非数値を指定した場合、isset
はFALSE
を返します。
<?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
と関連の深い関数は↓の通りです。
- empty: 変数が空であるかどうか調べる
- unset: 指定した変数の割り当てを解除する
- defined: 指定した名前の定数が存在するか調べる
- array_key_exists: 指定したキーが配列にあるか調べる
- is_null: 変数がNULLかどうかか調べる
問題
Q1: isset
に渡せる変数の数として適当なものを答えよ
1個
2個
複数
Q2: isset
にNULL
が代入された変数を渡すとどうなるか答えよ
TRUEが返る
FALSEが返る
エラーになる
Q3: isset
に宣言のみされた変数を渡すとどうなるか答えよ
TRUEが返る
FALSEが返る
エラーになる
正解
Q1: 3
Q2: 2
Q3: 2