我更喜欢在启用E_NOTICES的情况下进行开发,但在处理数组索引时,我经常需要编写过多的,过于冗长的代码。如何在启用了E_NOTICES的较少代码中编写此代码。
禁止通知
if ($_REQUEST['some_key'] == 'bob')
{
}
没有通知被禁止
if (array_key_exists('some_key', $_REQUEST) && $_REQUEST['some_key'] == 'bob')
{
}
答案 0 :(得分:3)
我通常使用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'])
之类的内容答案 1 :(得分:0)
简单的方法是使用@
进行错误抑制:
if (@$_REQUEST['some_key'] == 'bob') {}
但是,如果每页加载时使用它超过一次或两次,这可能会非常慢。
另一个解决方案是通过引用分配您的未知(虽然我不是100%确定这适用于像$_REQUEST
这样的超级全局:
$some_key =& $_REQUEST['some_key'];
if ($some_key == 'bob') {}
一般来说,我只是像Pascal所说的那样使用isset
。