isset () y vacío () - qué usar

105

¿Podrías ayudarme a mejorar mi estilo de codificación? :) En algunas tareas tengo que comprobar si la variable está vacía o contiene algo. Para resolver esta tarea, suelo hacer lo siguiente.

Verificar: ¿esta variable está configurada o no? Si está configurado, lo verifico, ¿está vacío o no?

<?php
    $var = '23';
    if (isset($var)&&!empty($var)){
        echo 'not empty';
    }else{
        echo 'is not set or empty';
    }
?>

Y tengo una pregunta: ¿debería usar isset () antes de vacío ()? ¿Es necesario? TIA!

Dmitry Belaventsev
fuente
vacío es! isset ($ var) || $ var == false
zloctb
2
en mi opinión, empty () es un desarrollo horrible de PHP. Como considera "0" en cualquier forma como "vacío", puede caer en malas trampas que cuestan mucho tiempo de depuración. Yo diría: evite a toda costa y simplemente escriba la lógica usted mismo
Juan

Respuestas:

143

Depende de lo que esté buscando, si solo está buscando para ver si está vacío, use, emptyya que verifica si también está configurado, si desea saber si algo está configurado o no isset.

Empty comprueba si la variable está configurada y si lo está, la comprueba en busca de nulos, "", 0, etc.

Isset solo verifica si está configurado, podría ser cualquier cosa que no sea nula

Con empty, las siguientes cosas se consideran vacías:

  • "" (una cadena vacía)
  • 0 (0 como un número entero)
  • 0.0 (0 como flotante)
  • "0" (0 como una cadena)
  • NULO
  • FALSO
  • array () (una matriz vacía)
  • var $ var; (una variable declarada, pero sin un valor en una clase)

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


Como se mencionó en los comentarios, la falta de advertencia también es importante con vacío ()

PHP Manual dice

empty () es lo opuesto a (boolean) var, excepto que no se genera ninguna advertencia cuando la variable no está configurada .

Respecto a isset

PHP Manual dice

isset () devolverá FALSE si se prueba una variable que se ha establecido en NULL


Su código estaría bien como:

<?php
    $var = '23';
    if (!empty($var)){
        echo 'not empty';
    }else{
        echo 'is not set or empty';
    }
?>

Por ejemplo:

$var = "";

if(empty($var)) // true because "" is considered empty
 {...}
if(isset($var)) //true because var is set 
 {...}

if(empty($otherVar)) //true because $otherVar is null
 {...}
if(isset($otherVar)) //false because $otherVar is not set 
 {...}
Pez Cuckow
fuente
Es malo: en el código anterior,
verifico
Simplemente verifique si está vacío, php no arrojará un error si este no es el caso.
Pez Cuckow
3
Está omitiendo el punto más importante de empty: No lanza una advertencia cuando la variable probada no existe. Ese es el objetivo de esta función, de lo contrario es idéntica a == false.
diciembre
1
Entonces, el hecho en el manual de que "no se genera ninguna advertencia cuando la variable no está configurada" me confundió. Sin advertencia no significa que no tendré problemas en el siguiente código. Ahora está claro para mí. ¡Muchas gracias!
Dmitry Belaventsev
"isset solo comprueba si está configurado, aún podría ser nulo" Eso no es cierto: isseten una variable nula (y existente) se evaluará false.
netcoder
12

En su caso particular: if ($var).

Debe usarlo issetsi no sabe si la variable existe o no. Sin embargo, dado que lo declaró en la primera línea, sabe que existe, por lo tanto, no necesita, no, no debe usar isset.

Lo mismo se aplica empty, solo que emptytambién combina una verificación de la veracidad del valor. emptyes equivalente a !isset($var) || !$vary !emptyes equivalente a isset($var) && $var, o isset($var) && $var == true.

Si solo desea probar una variable que debería existir para la veracidad , if ($var)es perfectamente adecuado y al grano.

deceze
fuente
Éste explica mucho mejor. Si obtenemos una comparación para todos los demás casos como este !empty is equivalent to isset($var) && $var, sería increíble. Gracias @deceze
Vir
6

Puede usar empty (); como se ve en la documentación , devolverá falso si la variable no tiene valor.

Un ejemplo en esa misma página:

<?php
$var = 0;

// Evaluates to true because $var is empty
if (empty($var)) {
    echo '$var is either 0, empty, or not set at all';
}

// Evaluates as true because $var is set
if (isset($var)) {
    echo '$var is set even though it is empty';
}
?>

Puede usar isset si solo quiere saber si no es NULL. De lo contrario, parece que vacío () está bien para usar solo.

chris
fuente
¿Explicación del voto negativo? No pregunta si son iguales, pregunta si necesita verificar si está configurado antes de verificar que esté vacío.
chris
No lo hice downvote, pero "el uso isset si quiero saber que no es nulo" no es correcto: $var = null; isset( $var ) == true.
JJJ
Del Manual de PHP5 / 4: isset () - "Determinar si una variable está configurada y no es NULL". us.php.net/manual/en/function.isset.php
chris
2

Aquí están las salidas de isset()y empty()para las 4 posibilidades: no declarado, nulo, falso y verdadero.

$a=null;
$b=false;
$c=true;

var_dump(array(isset($z1),isset($a),isset($b),isset($c)),true); //$z1 previously undeclared
var_dump(array(empty($z2),empty($a),empty($b),empty($c)),true); //$z2 previously undeclared

//array(4) { [0]=> bool(false) [1]=> bool(false) [2]=> bool(true) [3]=> bool(true) } 
//array(4) { [0]=> bool(true) [1]=> bool(true) [2]=> bool(true) [3]=> bool(false) } 

Notará que todos los resultados 'isset' son opuestos a los resultados 'vacíos' excepto por el caso $b=false. Todos los valores (excepto el nulo que no es un valor sino un no valor) que se evalúan como falso devolverán verdadero cuando se prueben por issety falso cuando se prueben con 'vacío'.

Así que usa isset() cuando esté preocupado por la existencia de una variable. Y utilícelo emptycuando esté probando si es verdadero o falso. Si el tipo real de asuntos vacío, uso is_nully ===0, ===false, ===''.

dnagirl
fuente
1

Empty devuelve verdadero si no se establece la var. Pero isset devuelve verdadero incluso si la var no está vacía.

Whiskas
fuente
-3
$var = 'abcdef';
if(isset($var))
{
   if (strlen($var) > 0);
   {
      //do something, string length greater than zero
   }
   else
   {
     //do something else, string length 0 or less
   }
}

Este es un ejemplo simple. Espero eso ayude.

editar: agregado isseten caso de que una variable no esté definida como arriba, causaría un error, verificar si su primer conjunto al menos ayudará a eliminar algunos dolores de cabeza en el futuro.

Akos
fuente
7
strlen bajo cero? Quiero ver esa cuerda.
diciembre
@deceze Solo un ejemplo aproximado :) OK use = 0 not <0
Akos