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
- es marginalmente más lento (sobrecarga de llamada de función)
- 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
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.