2

私はE_NOTICESをオンにして開発することを好みますが、配列インデックスを操作するときは、過剰で過度に冗長なコードを記述しなければならないことがよくあります。E_NOTICESを有効にして、このコードをより少ないコードで記述するにはどうすればよいですか。

通知が抑制された

if ($_REQUEST['some_key'] == 'bob')
{
}

通知なしに抑制

if (array_key_exists('some_key', $_REQUEST) && $_REQUEST['some_key'] == 'bob')
{
}
4

2 に答える 2

3

私は通常、そのようなことに対してisset()の代わりに を使用します。array_key_exists()これは、次のようなものを使用することを意味します:

if (isset($_REQUEST['some_key']) && $_REQUEST['some_key'] == 'bob')
{
}


いくつかの違い:

  • issetは関数ではなく言語構造です -- そしてその高速(関数呼び出しなし)
  • データが;の場合issetに返されることに注意してください。戻りますfalsenullarray_key_existstrue
    • しかし、GET/POST パラメータを扱う場合は特に、問題にならないことがよくあります。
  • 書くほうが短い(文字数が少ない)
    • if (isset($_REQUEST['a'], $_REQUEST['b'], $_REQUEST['c'])必要に応じて、次のようなものを使用できます
于 2010-04-23T15:56:29.753 に答える
0

簡単な方法は@、エラー抑制に使用することです。

if (@$_REQUEST['some_key'] == 'bob') {}

ただし、ページの読み込みごとに1回または2回以上使用している場合、これは非常に遅くなる可能性があります。

別の解決策は、参照によって未知のものを割り当てることです(ただし、これが次のようなスーパーグローバルで機能するかどうかは100%わかりません$_REQUEST)。

$some_key =& $_REQUEST['some_key'];
if ($some_key == 'bob') {}

一般的に、私はissetパスカルが言ったように使用します。

于 2010-04-23T16:08:44.020 に答える