调用isset()与返回未定义的索引

时间:2012-11-01 20:08:39

标签: php arrays performance warnings

我有非常广泛使用的代码,它从另一个方法获取数组,有时会返回该数组的第一个元素。鉴于null是函数的可接受返回值,是否值得在数组索引上调用isset()(或检查数组长度等)的性能开销,或者更好的方法是返回不存在的指数(警告除外)。除了阻止警告之外,调用isset()有什么好处。

以下示例已经过简化,实际函数不会获取数组的第一个元素。

返回可能不存在的索引:

function get_array_element(){
    $array = get_array();       // function that returns array
    return $array[0];           // return index 0 which may not exist
}

检查是否设置了索引:

function get_array_element(){
    $array = get_array();       // function that returns array
    return (isset($array[0]))?  // check if index 0 isset() else return null
        $array[0] : 
        null; 
}

2 个答案:

答案 0 :(得分:2)

在访问未定义的索引时抛出通知 - 理论上 - 应该提醒您键名中的拼写错误。实际上,如果您首先使用isset,那么您可能只是在那里复制了密钥名称。或使用数字索引。或者一个常数。

另一方面,在大多数情况下,你正在访问一个索引,而不管它是否设置 - 在这种情况下,使用isset只是很烦人。很多语言都可以让你只是在没有警告的情况下检索任何索引,例如Javascript:只返回一个undefined

所以我建议忽略这个通知。不是全部,因为在某些情况下确实 有帮助,所以在开发中保持它们开启,但是使用@使这种数组访问无声。是的,这很丑陋,但确实有它的作用:

return @$array[0];

或者在简单的情况下,其他解决方案是否合适?

return array_shift($array);

答案 1 :(得分:-1)

调用isset内部该函数是无意义的,因为如果它不存在则返回null,但是无论你是否使用isset,都会从$ array [0]返回null。

如果它只抛出一个E_NOTICE,那我就不用担心了,只需检查get_array_element()== null。