¿Hay alguna diferencia entre esto ...
if (is_null($var)) {
do_something();
}
¿y esto?
if ($var === null) {
do_something();
}
¿Qué forma es mejor para verificar si una variable contiene nulo o no? ¿Hay casos extremos que deba conocer? (Inicializo todas mis variables, por lo que las variables inexistentes no son un problema).
===
operador sería más rápido ya que no es una función explícita ... pero me sorprendió una o dos veces.Respuestas:
Siempre que la variable esté inicializada (lo que indicó, aunque no estoy 100% seguro de si esto es importante en este contexto o no. Ambas soluciones pueden generar una advertencia si la variable no se definió), son funcionalmente iguales.
===
Sin embargo, supongo que sería un poco más rápido, ya que elimina la sobrecarga de una llamada de función.Realmente depende de cómo mire su condición.
===
es para una estricta comparación de datos. NULL tiene solo un 'valor', por lo que esto funciona para comparar con NULL (que es una constante de PHP del 'valor' nulo)is_null
está comprobando que la variable sea del tipo de datos NULL.Depende de usted cuál elija, de verdad.
fuente
is_null
variante, porque es fácil de usar accidentalmente en== null
lugar de=== null
. Dado que== null
es lo mismo queempty
(ver otra respuesta), esto introduce un mayor potencial de error del programador (especialmente de nivel junior y medio) que uno simple y legibleis_null
.✅
estrue
❌
esfalse
| isset | is_null | ===null | ==null | empty | |-------|---------|---------|---------|---------|---------| | null | ❌ | ✅ | ✅ | ✅ | ✅ | | true | ✅ | ❌ | ❌ | ❌ | ❌ | | false | ✅ | ❌ | ❌ | ✅ | ✅ | | 0 | ✅ | ❌ | ❌ | ✅ | ✅ | | 1 | ✅ | ❌ | ❌ | ❌ | ❌ | | \0 | ✅ | ❌ | ❌ | ❌ | ❌ | | unset | ❌ | ✅ | ✅ | ✅ | ✅ | | "" | ✅ | ❌ | ❌ | ✅ | ✅ |
Resumen: 🔸 ♦ ️🔸
empty
es equivalente a==null
is_null
es equivalente a===null
isset
es inverso deis_null
y===null
fuente
$v
para representar alguna variable genérica, y luego los demásisset($v)
,is_null($v)
,$v===null
y así sucesivamenteisset
no se quejará de una variable indefinida, devolverá falso. Usaris_null
o=== null
resultará en un aviso.Ambos son exactamente iguales, los uso
is_null
porque hace que mi código sea más legiblefuente
is_null
que en realidad es menos claro. Si bien puede leerse bien,$v === null
no deja dudas de que la comparación se realiza con semántica estricta, perois_null($v)
algunos programadores se preguntarán si utiliza semántica===
o==
.is_null
podría eliminarse o redefinirse por completo, mientras=== null
que siempre funcionará.Si parece redundante que php tenga tantas funciones de tipo is_foo (), cuando solo puede usar operadores de comparación estándar, considere funciones llamadas programáticamente.
$arrayOfNullValues = array_filter($myArray, 'is_null');
fuente
$arrayWithoutNullValues
almacenaría una matriz que solo tienenull
valores, entonces.Acabo de ejecutar un punto de referencia rápido, probando un millón de iteraciones de cada uno.
is_null
tardó 8 segundos en completarse;=== null
tomó 1.Entonces, una llamada a
is_null
es 0.000007s más lenta que una llamada a===
en mi computadora.Encontraría algo más útil para optimizar.
Mi código:
<?php $start = time(); $var = null; for ($i = 1000000; $i--; ) { is_null($var); } echo time() - $start; $start = time(); for ($i = 1000000; $i--; ) { $var === null; } echo time() - $start;
fuente
is_null()
es un poco más rápido en mi computadora bajo 7.1.9 Win32.Usaría la función PHP incorporada sobre la comparación de operadores cada vez.
fuente
is_null($var)
es aproximadamente 14 veces más lento que$var===null
... 37,8 ms frente a 2,6 ms.Pero en realidad no sé por qué.
fuente
Una cosa que la gente a menudo olvida mencionar en esta discusión es que si lo que le interesa es la verificación de tipos estricta,
is_null
lo ayudará a nunca cometer un error tipográfico en sus operadores de comparación (== vs ===).fuente