È possibile utilizzare il costrutto linguaggio isset
o la funzione array_key_exists
.
isset
dovrebbe essere un po 'più veloce (in quanto non è una funzione), ma restituisce false se l'elemento esiste e ha il valore NULL
.
Ad esempio, considerando questa matrice:
$a = array(
123 => 'glop',
456 => null,
);
E quei tre prove, basandosi su isset
:
var_dump(isset($a[123]));
var_dump(isset($a[456]));
var_dump(isset($a[789]));
Il primo ti porterà (esiste l'elemento, ed è non null):
boolean true
mentre la seconda si arriva (esiste l'elemento, ma è nullo):
boolean false
E l'ultimo si arriva (l'elemento non esiste):
boolean false
D'altra parte, utilizzando array_key_exists
come questo:
var_dump(array_key_exists(123, $a));
var_dump(array_key_exists(456, $a));
var_dump(array_key_exists(789, $a));
si otterrebbe queste uscite:
boolean true
boolean true
boolean false
Perché, nei due primi casi, l'elemento esiste - anche se è nullo nel secondo caso. E, naturalmente, nel terzo caso, non esiste.
Per situazioni come la tua, io di solito uso isset
, considerando non sono mai nel secondo caso ... Ma scegliere quale usare è ora a voi ;-)
Ad esempio, il tuo codice potrebbe diventare qualcosa del genere:
if (!isset(self::$instances[$instanceKey])) {
$instances[$instanceKey] = $theInstance;
}
Devo lamentarmi perché "isset" non è sicuro. Chiamato '$ form = [1 => 5]; var_dump (isset ($ from [1])); 'restituisce' false' poiché '$ from' non esiste e non viene nemmeno notificato da' E_NOTICE'. Più lento, ma più sicuro 'array_key_exists' fa la cosa per me. – hejdav