1

我有非常广泛使用的代码,它从另一个方法中获取一个数组,有时会返回该数组的第一个元素。鉴于这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; 
}
4

2 回答 2

2

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

另一方面,在大多数情况下,您在访问索引时并不关心它是否设置——在这种情况下,使用isset只是令人讨厌。很多语言都允许您在没有警告的情况下检索任何索引,例如 Javascript:只返回一个undefined.

所以我建议忽略通知。不是所有的,因为在某些情况下确实帮助,所以在开发中保持它们打开,但使用@. 是的,它很丑,但它的工作是:

return @$array[0];

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

return array_shift($array);
于 2012-11-01T21:26:12.163 回答
-1

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

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

于 2012-11-01T21:10:12.523 回答