您可以使用语言构造集
或函数array_key_exists
。
isset
应该快一点(因为它不是一个函数),但如果元素存在并且具有值,则会返回false。NULL
例如,考虑以下数组:
$a = array(
123 => 'glop',
456 => null,
);
而这三个测试,依靠:isset
var_dump(isset($a[123]));
var_dump(isset($a[456]));
var_dump(isset($a[789]));
第一个会得到你(元素存在,但不是空的):
boolean true
而第二个会得到你(元素存在,但为空):
boolean false
最后一个会得到你(元素不存在):
boolean false
另一方面,像这样使用:array_key_exists
var_dump(array_key_exists(123, $a));
var_dump(array_key_exists(456, $a));
var_dump(array_key_exists(789, $a));
你会得到这些输出:
boolean true
boolean true
boolean false
因为,在前两种情况下,元素存在 - 即使它在第二种情况下为空。当然,在第三种情况下,它不存在。
对于像您这样的情况,我通常使用,考虑到我从未在第二种情况下...但是现在选择使用哪一个取决于您;-)isset
例如,你的代码可以变成这样:
if (!isset(self::$instances[$instanceKey])) {
$instances[$instanceKey] = $theInstance;
}