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') {}

但是,如果您在每次页面加载时使用它超过一次或两次,这可能会非常慢。

另一种解决方案是通过引用分配您的未知数(尽管我不是 100% 确定这将适用于像这样的超全局变量$_REQUEST):

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

一般来说,我只是isset像 Pascal 说的那样使用。

于 2010-04-23T16:08:44.020 回答