我更喜欢在打开 E_NOTICES 的情况下进行开发,但在使用数组索引时,我经常不得不编写过多、过于冗长的代码。如何在启用 E_NOTICES 的情况下用更少的代码编写此代码。
通知被禁止
if ($_REQUEST['some_key'] == 'bob')
{
}
没有通知被压制
if (array_key_exists('some_key', $_REQUEST) && $_REQUEST['some_key'] == 'bob')
{
}
我一般用isset()
, 而不是array_key_exists()
, 来做那种事;这意味着使用这样的东西:
if (isset($_REQUEST['some_key']) && $_REQUEST['some_key'] == 'bob')
{
}
几个区别:
isset
是一种语言结构,而不是一个函数——而且它更快(没有函数调用)isset
它将返回;将返回false
null
array_key_exists
true
if (isset($_REQUEST['a'], $_REQUEST['b'], $_REQUEST['c'])
如有必要,您可以使用类似的东西简单的方法是使用@
错误抑制:
if (@$_REQUEST['some_key'] == 'bob') {}
但是,如果您在每次页面加载时使用它超过一次或两次,这可能会非常慢。
另一种解决方案是通过引用分配您的未知数(尽管我不是 100% 确定这将适用于像这样的超全局变量$_REQUEST
):
$some_key =& $_REQUEST['some_key'];
if ($some_key == 'bob') {}
一般来说,我只是isset
像 Pascal 说的那样使用。