8

特定のキーの存在を確認する場合は必須ではないことを学びましたが、インスタンス化さisset($array)れているかどうかを既知のキーなしで確認する理由があることも知っています。$array

例:これ:

foreach ($foo as $bar) {
    echo $bar;
}

PHP通知:未定義の変数:foo
PHP警告:foreach()に無効な引数が指定されました

この方法の方が優れています:

if (isset($foo)) {
    foreach ($foo as $bar) {
    echo $bar;
    }
}

データを処理するときに配列を頻繁に使用するので、配列全体かどうかを確認する必要がある他のケースがあるかどうかを尋ねたいと思いましたisset()か?それとも$array[$key]、わかっているときはいつでも、使用するすべてのものをチェックすることに固執する必要がありますか?これは、これを行うことに長所または短所があるかどうかの質問に関連しています。

if (isset($foo[0])) {
    foreach ($foo as $bar) {
        // noop
    }
}

これの代わりに:

if (isset($foo)) {
    foreach ($foo as $bar) {
        // noop
    }
}

それで、ifがわかっているisset($array)代わりに使用する必要がありますか?isset($array[$key])$key

4

2 に答える 2

18

PHP ではisset()、関数ではなく特別な形式です。を呼び出すときisset($ary[$index])$aryそれ自体を最初に設定する必要はありません。を使用しても、実際にアクセスしようとしないE_STRICTため、呼び出しは警告を生成しません。設定されていないと判断するまで取得し、 を返します。したがって、要素に適用するために最初に配列をチェックする必要はありません。isset$ary[$index]$aryfalseisset

あなたの質問は、あなたがこれをすでに知っていることを示しており、とにかくそれを行う理由があるかどうか疑問に思っています. 私が考えることができる唯一のことは効率です。配列内に存在する多数のキーをチェックする場合は、配列自体が設定されていないことを最初に検出し、すべてをスキップすることで、いくつかの作業を節約できますその場合、個々のキーがチェックされます。

于 2012-04-23T01:01:28.543 に答える
6

配列が定義されているかどうかを知りたい場合は、 を使用しますisset($array)

特定のキーが定義されているかどうかを知りたい場合は、 を使用しますisset($array[$key])

たとえば、これは完全に有効です。

$foo = array();
foreach($foo as $bar) {
    // never called because $foo is an empty array
}
于 2012-04-23T00:52:10.990 に答える