isset

変数が宣言されていること、そして null とは異なることを検査する

説明

bool isset(mixed $var, mixed ...$vars)

変数がセットされているかを調べます。 これは変数が宣言されており、 null とは異なる値だということです。

変数が、unset により割当を解除された場合、 もはやセットされているとは見做されません。

null が代入されている変数をチェックしたときは、 issetfalse を返します。 null文字 ("\0") は PHP の null 定数とは異なることにも注意してください。

複数のパラメータが渡された場合は、 isset は全てのパラメータがセットされている場合にだけ true を返します。 評価は左から右へと行われ、セットされていない値に出会うとすぐに評価が止まります。

パラメータ

var

調べたい変数。

vars

別の変数。

戻り値

var が存在して null 以外の値をとれば true、 そうでなければ false を返します。

例1 isset の例

<?php

$var = '';

// これは TRUE と評価されるので、テキストが出力される
if (isset($var)) {
    echo "This var is set so I will print.";
}

// 次の例では、isset() の戻り値を出力するため var_dump を
// 使用している

$a = "test";
$b = "anothertest";

var_dump(isset($a));      // TRUE
var_dump(isset($a, $b)); // TRUE

unset ($a);

var_dump(isset($a));     // FALSE
var_dump(isset($a, $b)); // FALSE

$foo = NULL;
var_dump(isset($foo));   // FALSE

?>

この関数は配列の要素に対しても動作します:

<?php

$a = array ('test' => 1, 'hello' => NULL, 'pie' => array('a' => 'apple'));

var_dump(isset($a['test']));            // TRUE
var_dump(isset($a['foo']));             // FALSE
var_dump(isset($a['hello']));           // FALSE

// キー 'hello' は NULL と等しいのでセットされていないと見なされる。
// もし NULL なキー値に対してチェックを行いたい場合、次を試してみること:
var_dump(array_key_exists('hello', $a)); // TRUE

// 配列の深い要素の値のチェック
var_dump(isset($a['pie']['a']));        // TRUE
var_dump(isset($a['pie']['b']));        // FALSE
var_dump(isset($a['cake']['a']['b']));  // FALSE

?>

例2 文字列のオフセットに対する isset

<?php
$expected_array_got_string = 'somestring';
var_dump(isset($expected_array_got_string['some_key']));
var_dump(isset($expected_array_got_string[0]));
var_dump(isset($expected_array_got_string['0']));
var_dump(isset($expected_array_got_string[0.5]));
var_dump(isset($expected_array_got_string['0.5']));
var_dump(isset($expected_array_got_string['0 Mostel']));
?>

上の例の出力は以下となります。

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

注意

警告

isset は何らかの値が渡された 変数の場合のみ動作します。そうでない場合、パースエラーとなります。 もし 定数 が設定されているかどうかをチェックする場合は、 defined を使用してください。

注意: これは、関数ではなく 言語構造のため、可変関数名前付き引数 を用いてコールすることはできません。

注意:

オブジェクトのアクセス不能なプロパティに対して isset を使用した場合は、もしオーバーロードメソッド __isset() が宣言されていればそれをコールします。

参考