¿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_nullestá comprobando que la variable sea del tipo de datos NULL.Depende de usted cuál elija, de verdad.
fuente
is_nullvariante, porque es fácil de usar accidentalmente en== nulllugar de=== null. Dado que== nulles 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: 🔸 ♦ ️🔸
emptyes equivalente a==nullis_nulles equivalente a===nullissetes inverso deis_nully===nullfuente
$vpara representar alguna variable genérica, y luego los demásisset($v),is_null($v),$v===nully así sucesivamenteissetno se quejará de una variable indefinida, devolverá falso. Usaris_nullo=== nullresultará en un aviso.Ambos son exactamente iguales, los uso
is_nullporque hace que mi código sea más legiblefuente
is_nullque en realidad es menos claro. Si bien puede leerse bien,$v === nullno 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_nullpodría eliminarse o redefinirse por completo, mientras=== nullque 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
$arrayWithoutNullValuesalmacenaría una matriz que solo tienenullvalores, entonces.Acabo de ejecutar un punto de referencia rápido, probando un millón de iteraciones de cada uno.
is_nulltardó 8 segundos en completarse;=== nulltomó 1.Entonces, una llamada a
is_nulles 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_nulllo ayudará a nunca cometer un error tipográfico en sus operadores de comparación (== vs ===).fuente