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