¿Hay alguna diferencia entre issety !empty. Si hago esta doble verificación booleana, ¿es correcta de esta manera o redundante? y hay una forma más corta de hacer lo mismo?
Los complementos exactos obvios son isset y is_null, pero! Empty cubre algunos diferentes. Todo depende del tipo de datos que esté probando.
Jeff Clayton
Respuestas:
420
Esto es completamente redundante. emptyes más o menos abreviatura para !isset($foo) || !$foo, y !emptyes análogo a isset($foo) && $foo. Es decir, emptyhace lo contrario de issetmás una verificación adicional de la veracidad de un valor.
O en otras palabras, emptyes lo mismo que !$foo, pero no arroja advertencias si la variable no existe. Ese es el punto principal de esta función: hacer una comparación booleana sin preocuparse por la variable que se está configurando.
@karim IMO emptyes una de las funciones más incomprendidas en PHP. El pequeño fragmento sobre "no se genera ninguna advertencia" es muy fácil de pasar por alto. Tuve que escanear la documentación yo mismo varias veces para detectarla y publicarla aquí.
deceze
2
empty($vars[1])no causa ninguna advertencia, incluso $vars[1]no está configurado, pero lo echo $vars[1]hará. Verifiqué el hecho usando echo $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;.
Amil Waduwawara
44
@Shahor Muchos idiomas consideran 0como false. PHP no es el único. Aún no estoy seguro de cuál es su queja.
deceze
33
isset() prueba si una variable está establecida y no es nula:
La respuesta aceptada de ninguna manera sugiere que issetsea equivalente a !empty.
deceze
8
$a =0;if(isset($a)){//$a is set because it has some value ,eg:0
echo '$a has value';}if(!empty($a)){//$a is empty because it has value 0
echo '$a is not empty';}else{
echo '$a is empty';}
Pero no ha manejado la variable no establece el caso.
Amil Waduwawara
3
Empty just check es la variable / matriz referida que tiene un valor si verifica el php doc (vacío) verá que estas cosas se consideran vacías
*""(an empty string)*0(0as an integer)*"0"(0as a string)* NULL
* FALSE
* array()(an empty array)*var $var;(a variable declared, but without a valuein a class)
while isset comprueba si la variable isset y no es nula, que también se puede encontrar en el php doc (isset)
No se genera ninguna advertencia si la variable no existe. Eso significa que empty () es esencialmente el conciso equivalente a! Isset ($ var) || $ var == falso.
Esto nunca ha sido necesario en ninguna versión de PHP, ya que vacío ya verifica si (no) está configurado. Estás confundiendo el hecho de que vacío ahora admite expresiones con la pregunta.
alxgb
Solo es cierto, cinco años después.
Lennon
2
isset($vars[1]) AND !empty($vars[1])es equivalente a !empty($vars[1]).
Preparé un código simple para mostrarlo empíricamente.
"Vacío": solo funciona en variables. Vacío puede significar diferentes cosas para diferentes tipos de variables (consulte el manual: http://php.net/manual/en/function.empty.php ).
"isset": comprueba si la variable existe y busca un valor NULL verdadero o falso. Puede desarmarse llamando a "desarmado". Una vez más, consulte el manual.
El uso de cualquiera de los dos depende del tipo de variable que esté utilizando.
Yo diría que es más seguro verificar ambos, porque primero está verificando si la variable existe y si realmente no es NULL o está vacía.
@szahn "es más seguro verificar ambos", usted como programador puede verificar todo lo que desee por seguridad. Pero si su código es redundante, puede ser redundante como programador.
madlopt
0
si usamos la misma página para agregar / editar a través del botón Enviar como se muestra a continuación
la publicación anterior se envió porque presiono enter por error, aquí está mi respuesta completa ... ¿por qué votar a favor? :(
diEcho
0
Desde el sitio web de PHP, refiriéndose a la empty()función:
Devuelve FALSEsi vartiene un valor no vacío y no cero.
Eso es bueno saberlo. En otras palabras, todo, desde NULL, 0hasta "" volverá TRUEal usar la empty()función.
Aquí está la descripción de lo isset()que devuelve la función:
Devuelve TRUEsi varexiste; FALSEde otra manera.
En otras palabras, solo las variables que no existen (o variables con NULLvalores estrictos ) volverán FALSEa la isset()función. Todas las variables que tienen cualquier tipo de valor, si se trata de 0una cadena de texto en blanco, etc. volverán TRUE.
Respuestas:
Esto es completamente redundante.
empty
es más o menos abreviatura para!isset($foo) || !$foo
, y!empty
es análogo aisset($foo) && $foo
. Es decir,empty
hace lo contrario deisset
más una verificación adicional de la veracidad de un valor.O en otras palabras,
empty
es lo mismo que!$foo
, pero no arroja advertencias si la variable no existe. Ese es el punto principal de esta función: hacer una comparación booleana sin preocuparse por la variable que se está configurando.El manual lo pone así:
Simplemente puede usar
!empty($vars[1])
aquí.fuente
$vars[1]
, recibirá un aviso.empty
es una de las funciones más incomprendidas en PHP. El pequeño fragmento sobre "no se genera ninguna advertencia" es muy fácil de pasar por alto. Tuve que escanear la documentación yo mismo varias veces para detectarla y publicarla aquí.empty($vars[1])
no causa ninguna advertencia, incluso$vars[1]
no está configurado, pero loecho $vars[1]
hará. Verifiqué el hecho usandoecho $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;
.0
comofalse
. PHP no es el único. Aún no estoy seguro de cuál es su queja.isset()
prueba si una variable está establecida y no es nula:http://us.php.net/manual/en/function.isset.php
empty()
puede devolver verdadero cuando la variable se establece en ciertos valores:http://us.php.net/manual/en/function.empty.php
Para demostrar esto, intente el siguiente código con $ the_var sin asignar, establecido en 0 y establecido en 1.
fuente
La respuesta aceptada no es correcta.
isset () NO es equivalente a! empty ().
Creará algunos errores bastante desagradables y difíciles de depurar si sigue esta ruta. Por ejemplo, intente ejecutar este código:
https://3v4l.org/J4nBb
fuente
isset
sea equivalente a!empty
.fuente
Empty just check es la variable / matriz referida que tiene un valor si verifica el php doc (vacío) verá que estas cosas se consideran vacías
while isset comprueba si la variable isset y no es nula, que también se puede encontrar en el php doc (isset)
fuente
No es necesario.
php.net
fuente
isset($vars[1]) AND !empty($vars[1])
es equivalente a!empty($vars[1])
.Preparé un código simple para mostrarlo empíricamente.
La última fila es una variable indefinida.
Y código
La variable no definida debe evaluarse fuera de la función, porque la función en sí misma crea una variable temporal en el ámbito mismo.
fuente
"Vacío": solo funciona en variables. Vacío puede significar diferentes cosas para diferentes tipos de variables (consulte el manual: http://php.net/manual/en/function.empty.php ).
"isset": comprueba si la variable existe y busca un valor NULL verdadero o falso. Puede desarmarse llamando a "desarmado". Una vez más, consulte el manual.
El uso de cualquiera de los dos depende del tipo de variable que esté utilizando.
Yo diría que es más seguro verificar ambos, porque primero está verificando si la variable existe y si realmente no es NULL o está vacía.
fuente
si usamos la misma página para agregar / editar a través del botón Enviar como se muestra a continuación
entonces no debemos usar
bcoz
edit_id
se establece todo el tiempo, ya sea agregar o editar página, en su lugar, deberíamos usar la verificación debajo de la condiciónfuente
empty()
función:Devuelve
FALSE
sivar
tiene un valor no vacío y no cero.Eso es bueno saberlo. En otras palabras, todo, desde
NULL
,0
hasta "" volveráTRUE
al usar laempty()
función.isset()
que devuelve la función:Devuelve
TRUE
sivar
existe;FALSE
de otra manera.En otras palabras, solo las variables que no existen (o variables con
NULL
valores estrictos ) volveránFALSE
a laisset()
función. Todas las variables que tienen cualquier tipo de valor, si se trata de0
una cadena de texto en blanco, etc. volveránTRUE
.fuente