PHP - 如何在启用E_NOTICES的情况下编写更好的代码?

时间:2010-04-23 15:51:55

标签: php e-notices

我更喜欢在启用E_NOTICES的情况下进行开发,但在处理数组索引时,我经常需要编写过多的,过于冗长的代码。如何在启用了E_NOTICES的较少代码中编写此代码。

禁止通知

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

没有通知被禁止

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

2 个答案:

答案 0 :(得分:3)

我通常使用isset()代替array_key_exists()来做这种事情;这意味着使用这样的东西:

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


有几点不同:

  • isset是一种语言结构,而不是一种功能 - 而且它的速度更快(无函数调用)
  • 请注意,如果数据为issetfalse将返回null; array_key_exists将返回true
    • 但这通常不是问题,尤其是在处理GET / POST参数时
  • 写得更短(少了几个字)
    • 如果需要,您可以使用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