Me preguntaba cuál es la diferencia entre los dos casos a continuación y cuál se recomienda.
$val = 0;
if (!$val) {
//True
}
if (empty($val) {
//It's also True
}
Shi
Echa un vistazo a la Tabla de comparación de tipos de PHP.
Si revisa la tabla, notará que para todos los casos, empty($x)
es lo mismo que !$x
. Entonces todo se reduce a manejar variables no inicializadas. !$x
crea un E_NOTICE
mientras empty($x)
no es.
-
+1. También tenga en cuenta que esto es lo mismo que
!= [boolean result of evaluating $val]
por lo que la última columna de la primera tabla es principalmente lo que debería mirar.– más rockero
22 de agosto de 2011 a las 0:16
-
Gracias, eso es lo que necesitaba saber. Entonces supongo que vacío ($ x) es el enfoque más seguro. Supongo que la diferencia es insignificante en cuanto a rendimiento, ¿verdad?
– Bachx
22 de agosto de 2011 a las 0:24
-
Tenga en cuenta que cuando se utiliza el valor vacío () en propiedades de objetos inaccesibles, se llamará al método de sobrecarga __isset, si se declara.
– xdazz
22 de agosto de 2011 a las 2:03
Si usa vacío y la variable nunca se configuró/creó, no se generará ninguna advertencia/error.
Félix Kling
Vamos a ver:
Las siguientes cosas se consideran
empty
:
""
(una cadena vacía)0
(0
como un número entero)0.0
(0
como un flotador)"0"
(0
como una cadena)NULL
FALSE
array()
(una matriz vacía)var $var;
(una variable declarada, pero sin un valor en una clase)
Al convertir a booleano, se consideran los siguientes valores
FALSE
:
- el booleano
FALSE
sí mismo- el entero
0
(cero)- el flotador
0.0
(cero)- la cadena vacía, y la cadena
"0"
- una matriz con cero elementos
- un objeto con cero variables miembro (solo PHP 4)
- el tipo especial
NULL
(incluidas las variables no configuradas)SimpleXML
objetos creados a partir de etiquetas vacías
Parece que la única diferencia (con respecto al valor resultante) es cómo un SimpleXML
se maneja la instancia. Todo lo demás parece dar el mismo resultado (si inviertes el reparto booleano, por supuesto).
-
Entonces, ¿cuál es la conclusión? De la lista, boolean parece ser la verificación más robusta…
– Jason McCreary
22 de agosto de 2011 a las 0:19
-
Esto es incorrecto. Una prueba rápida en el shell de PHP revela que
empty
manijas vacíasSimpleXMLElement
instancias como!
lo hace; es simplemente un error en elempty
documentación que no se mencionan allí.–Mark Amery
7 junio 2015 a las 22:19
-
Tengo que amar la duplicación de doc.
– leonbloy
23 de febrero de 2019 a las 19:43