variable vacia not empty diferente php isnull

vacia - is_null($ x) vs $ x=== null en PHP



php is null or empty (7)

Posible duplicado:
¿Cuál es la diferencia entre is_null ($ var) y ($ var === null)?

PHP tiene dos (que yo sepa, y tres si cuenta isset() ) para determinar si un valor es nulo: is_null() y === null . He escuchado, pero no confirmado, que === null es más rápido, pero en una revisión del código, alguien sugirió fuertemente que use is_null() ya que está diseñado específicamente para el propósito de la evaluación nula. Él también comenzó a hablar sobre matemáticas o algo así.

De todos modos, el hecho de que is_null() sea ​​aparentemente más lento también me lleva a creer que está haciendo más de === null y probablemente sea el preferido. ¿Hay alguna razón para usar uno u otro? ¿Siempre se prefiere uno? ¿Qué pasa con isset() ?

Como un apéndice para posiblemente no cerrar esta pregunta, ¿qué pasa con isset() vs. is_null() ? Parece que todo lo que isset() hará es suprimir el aviso, por lo tanto, a menos que realmente desee un aviso para una variable indefinida, ¿hay alguna razón para usar is_null() lugar? ¿Qué tal si sabes que la variable se inicializa en el momento?

Finalmente, ¿hay alguna razón matemática para preferir is_null() sobre === null ? ¿Algo sobre null no es comparable?


La documentación de PHP tiene una buena discusión y experimentos sobre is_null, === null, isset . Lea especialmente la sección de comentarios.


Necesitas isset() si la variable posiblemente no está definida. Devuelve falso cuando la variable no está definida o === null (sí, es así de feo). Solo isset() y empty() no generan un E_NOTICE si la variable o el elemento de matriz no existe.

Realmente no hay una diferencia entre is_null y === null . Creo que === es mucho mejor, pero cuando, por ejemplo, necesitas usar call_user_func por algún motivo dudoso, deberías usar is_null .


No hay absolutamente ninguna diferencia en la funcionalidad entre is_null y === null .

La única diferencia es que is_null es una función y por lo tanto

  1. es marginalmente más lento (sobrecarga de llamada de función)
  2. se puede usar como una devolución de llamada, por ejemplo array_map(''is_null'', $array) .

Personalmente, utilizo null === siempre que puedo, ya que es más consistente con false === verificaciones false === y true === .

Si lo desea, puede verificar el código: is_identical_function ( === ) y php_is_type ( is_null ) hacen lo mismo para el caso IS_NULL .

El constructo de lenguaje isset() relacionado verifica si la variable realmente existe antes de realizar la verificación null . Entonces isset($undefinedVar) no lanzará un aviso.

También tenga en cuenta que isset() algunas veces puede devolver true aunque el valor sea null : este es el caso cuando se usa en un objeto sobrecargado, es decir, si el objeto define un método offsetExists / __isset que devuelve true incluso si el desplazamiento es null ( esto es realmente bastante común, porque las personas usan array_key_exists en offsetExists / __isset ).


No puedo decir si es mejor usar is_null o === null . Pero tenga isset al usar isset en matrices.

$a = array(''foo'' => null); var_dump(isset($a[''foo''])); // false var_dump(is_null($a[''foo''])); // true var_dump(array_key_exists(''foo'', $a)); // true


Según lo manifestado por otros, hay una diferencia de tiempo entre el uso de === y is_null() . Hizo algunas pruebas rápidas y obtuvo estos resultados:

<?php //checking with === $a = array(); $time = microtime(true); for($i=0;$i<10000;$i++) { if($a[$i] === null) { //do nothing } } echo ''Testing with === '', microtime(true) - $time, "/n"; //checking with is_null() $time = microtime(true); for($i=0;$i<10000;$i++) { if(is_null($a[$i])) { //do nothing } } echo ''Testing with is_null() '', microtime(true) - $time; ?>

Da los resultados

Probando con === 0.0090668201446533

Probando con is_null () 0.013684034347534

Ver el código en acción


Todos tienen su lugar, aunque solo isset () evitará advertencias variables indefinidas:

$ php -a Interactive shell php > var_dump(is_null($a)); PHP Notice: Undefined variable: a in php shell code on line 1 bool(true) php > var_dump($a === null); PHP Notice: Undefined variable: a in php shell code on line 1 bool(true) php > var_dump(isset($a)); bool(false) php >


=== y is_null es lo mismo.

Según este comentario, is_null es solo 250ns más lento. Creo que porque una función es más lenta que un operador.