Me preguntaba ¿cuál es la diferencia de los dos casos siguientes, y cuál se recomienda?
$val = 0;
if (!$val) {
//True
}
if (empty($val) {
//It's also True
}
Me preguntaba ¿cuál es la diferencia de los dos casos siguientes, y cuál se recomienda?
$val = 0;
if (!$val) {
//True
}
if (empty($val) {
//It's also True
}
Eche un vistazo a PHP type comparison table.
Si consulta la tabla, observará 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 que empty($x)
no lo hace.
Si usa vacío y la variable nunca se configuró/creó, no se lanzará ninguna advertencia/error.
Vamos a ver:
Los siguientes factores son considerados como
empty
:
""
(una cadena vacía)0
(0
como un 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 boolean, los siguientes valores son considerados
FALSE
:
- el booleano
FALSE
sí- el número entero
0
(cero)- el flotador
0.0
(cero)- la cadena vacía, y la cadena
"0"
- una matriz con elementos cero
- un objeto con variables cero miembro (PHP 4 solamente)
- el tipo especial
NULL
(incluyendo variables no definidas)SimpleXML
objetos creados a partir de etiquetas vacías
Parece que la única diferencia (con respecto al valor resultante) es cómo se maneja una instancia SimpleXML
.Todo lo demás parece dar el mismo resultado (si inviertes el molde booleano por supuesto).
Entonces, ¿cuál es la conclusión? De la lista, boolean parece el control más robusto ... –
Esto es incorrecto. Una prueba rápida en el shell PHP revela que 'empty' maneja instancias' SimpleXMLElement' vacías al igual que '!' Does; es simplemente un error en la documentación 'vacía' que no se mencionan allí. –
+1. También tenga en cuenta que esto es lo mismo que '! = [Resultado booleano de la evaluación de $ val]', por lo que la última columna de la primera tabla es principalmente lo que debería estar mirando. – rockerest
+1 Buen hallazgo en la tabla de comparación. –
Gracias, eso es lo que necesitaba saber. Así que supongo que vacío ($ x) es el enfoque más seguro. Supongo que la diferencia es insignificante en cuanto a rendimiento, ¿verdad? – Bachx