Вы можете использовать либо конструкцию языка isset
, либо функцию array_key_exists
.
isset
должен быть немного быстрее (как это не функция), но будет возвращать ложь, если элемент существует и имеет значение NULL
.
Например, рассматривая этот массив:
$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
Хотя второй один получит Вас (элемент существует, но равна нулю):
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;
}
Должен жаловаться, потому что 'isset' является typo-unsafe. Вызывается '$ form = [1 => 5]; var_dump (isset ($ from [1])); 'возвращает' false', так как '$ from' не существует, и вы даже не уведомлены' E_NOTICE'. Медленнее, но более безопасные 'array_key_exists' делают что-то для меня. – hejdav