2010-12-30 22 views
210

¿Hay una diferencia entre isset y !empty? Si realizo esta verificación doble booleana, ¿es correcto de esta manera o redundante? y hay una manera más corta de hacer lo mismo?¿Por qué comprobar tanto isset() como? Empty()

isset($vars[1]) AND !empty($vars[1]) 
+1

Hay una bonita gráfica de los resultados de su uso con diferentes tipos de variables (tienen diferencias) aquí: https://www.virendrachandak.com/demos/php-isset-vs-empty-vs-is_null.php –

+0

Los complementos obvios exactos son set e is_null, pero! empty cubre algunas diferentes. Todo depende del tipo de datos que está probando. –

Respuesta

333

Esto es completamente redundante. empty es más o menos taquigrafía para !isset($foo) || !$foo, y !empty es análogo a isset($foo) && $foo. Es decir. empty hace lo contrario de isset más un cheque adicional para la verdad 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.

The manual lo expone así:

empty() es lo contrario de (boolean) var, excepto que ninguna advertencia se genera cuando no se establece la variable.

Puede simplemente usar !empty($vars[1]) aquí.

+3

Pero si no hay '$ vars [1]' recibirá un aviso. – karim79

+48

@karim No, no lo hará. Ese es el punto. – deceze

+3

No tengo idea de dónde obtuve esa idea. Más one'd. – karim79

26

isset() pruebas si se establece una variable y no nulo:

http://us.php.net/manual/en/function.isset.php

empty() puede volver cierto cuando la variable se establece a ciertos valores:

http://us.php.net/manual/en/function.empty.php

Para demuéstrelo, pruebe el siguiente código con $ the_var sin asignar, configurado para 0, y se pone a 1.

<?php 

#$the_var = 0; 

if (isset($the_var)) { 
    echo "set"; 
} else { 
    echo "not set"; 
} 

echo "\n"; 

if (empty($the_var)) { 
    echo "empty"; 
} else { 
    echo "not empty"; 
} 
?> 
4

cheque simplemente vacía es la variable REFIERE/matriz tiene un valor si se comprueba la php doc(empty) verá estas cosas se consideran emtpy

* "" (an empty string) 
* 0 (0 as an integer) 
* "0" (0 as a string) 
* NULL 
* FALSE 
* array() (an empty array) 
* var $var; (a variable declared, but without a value in a class) 

mientras isset comprobar si la variable isset y no null que también se puede encontrar en el php doc(isset)

0

"Vacío": solo funciona en las variables. Vacío puede significar cosas diferentes para diferentes tipos de variables (consulte el manual: http://php.net/manual/en/function.empty.php).

"isset": comprueba si la variable existe y comprueba si hay un verdadero valor NULO o falso. Se puede desactivar llamando a "unset". Una vez más, verifique el manual.

El uso de uno de ellos depende del tipo de variable que esté utilizando.

Yo diría que es más seguro verificar ambas cosas, porque primero se está comprobando si la variable existe, y si realmente no es NULA o está vacía.

+3

No es necesario verificar ambos. – deceze

+1

@szahn "más seguro para verificar ambos", - usted, como programador, puede verificar todo lo que quiere para su seguridad. Pero si su código es redundante, entonces puede ser redundante como programador. – madlopt

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'; 
} 
+1

Pero no ha manejado la variable no configurada. –

1

si utilizamos misma página para añadir/editar a través de botón de envío, como a continuación

<input type="hidden" value="<?echo $_GET['edit_id'];?>" name="edit_id"> 

entonces no debemos utilizar

isset($_POST['edit_id']) 

bcoz edit_id se fija todo el tiempo si se trata de agregar o editar la página, en su lugar debemos utilizar la condición siguiente de verificación

!empty($_POST['edit_id']) 
+0

la publicación anterior fue enviada por error presioné ingresar por error, aquí está mi respuesta completa ... ¿por qué downvote? :( – diEcho

0

No es necesario.

No se genera ninguna advertencia si la variable no existe. Eso significa vacío() es esencialmente el conciso equivalente a! Isset ($ var) || $ var == falso.

php.net

+2

Esto nunca ha sido necesario en ninguna versión de PHP, ya que empty ya verifica (no) isset. Estás confundiendo el hecho de que empty ahora admite expresiones con la pregunta. – Think

+0

Es verdad. Tienes razón. – madlopt

8

La respuesta aceptada no es correcto.

isset() es NO equivalente a! Empty().

Va a crear algunos errores bastante desagradables y difíciles de depurar si se va por esta ruta. p.ej. intente ejecutar este código:

<?php 

$s = ''; 

print "isset: '" . isset($s) . "'. "; 
print "!empty: '" . !empty($s) . "'"; 

?> 

https://3v4l.org/J4nBb

0

¿qué hay que

function IsEmpty($myVar){ 
    if(isset($myVar) && (!empty($myVar) OR $myVar === 0 OR $myVar === false) ){ 
     return false; 
    } else{ 
     return true; 
    } 
} 

$myVar = 0; // Set and Not Empty 
$myVar = true; // Set and Not Empty 
$myVar = false; // Set and Not Empty 
$myVar = ''; // Either Not Set or Empty 
$myVar = 'abc'; // Set and Not Empty 

if(!IsEmpty($myVar)){ 
    echo 'Set and Not Empty'; 
} else{ 
    echo 'Either Not Set or Empty'; 
} 

Demostración: http://sandbox.onlinephpfunctions.com/code/7131f142742f0765c2619841bb9abfa598bcf066

Cuestiones relacionadas