isset () e empty () - o que usar


105

Você poderia me ajudar a melhorar meu estilo de codificação? :) Em algumas tarefas eu preciso verificar - a variável está vazia ou contém algo. Para resolver essa tarefa, geralmente faço o seguinte.

Verifique - esta variável está definida ou não? Se estiver definido - eu verifico - está vazio ou não?

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

E eu tenho uma pergunta - devo usar isset () antes de empty () - é necessário? TIA!


vazio é! isset ($ var) || $ var == false
— zloctb

2
na minha opinião, empty () é um desenvolvimento horrível do PHP. Como ele considera "0" em qualquer formato como "vazio", você pode cair em armadilhas ruins que custam muito tempo de depuração. Eu diria: evite a todo custo e apenas escreva a lógica você mesmo
— João

Respostas:


143

Depende do que você está procurando, se você está apenas olhando para ver se está vazio é só usar, emptypois ele verifica se está configurado também, se você quer saber se algo está configurado ou não, use isset.

Empty verifica se a variável está definida e se estiver, verifica se há nulo, "", 0, etc.

Isset apenas verifica se está definido, pode ser algo diferente de nulo

Com empty, os seguintes itens são considerados vazios:

  • "" (uma string vazia)
  • 0 (0 como um inteiro)
  • 0,0 (0 como flutuante)
  • "0" (0 como string)
  • NULO
  • FALSO
  • array () (um array vazio)
  • var $ var; (uma variável declarada, mas sem um valor em uma classe)

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


Conforme mencionado nos comentários, a falta de aviso também é importante com o vazio ()

PHP Manual diz

empty () é o oposto de (boolean) var, exceto que nenhum aviso é gerado quando a variável não está definida .

Em relação ao isset

PHP Manual diz

isset () retornará FALSE se testar uma variável que foi definida como NULL


Seu código seria suficiente para:

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

Por exemplo:

$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 
 {...}

Isso significa - no código acima eu verifico se a variável está definida ou não duas vezes? :)
— Dmitry Belaventsev

Apenas verifique se está vazio, o php não lançará um erro se este não for o caso.
— Pez Cuckow

3
Você está omitindo o maior ponto de empty: Não lança um aviso quando a variável testada não existe. Esse é o objetivo dessa função, caso contrário, é idêntico a == false.
— deceze

1
Portanto, o fato no manual de que "nenhum aviso é gerado quando a variável não está configurada" me confundiu. Nenhum aviso não significa que não terei problemas no código abaixo. Agora está claro para mim. Muito obrigado!
— Dmitry Belaventsev

"isset apenas verifica se está definido, ainda pode ser nulo" Isso não é verdade: issetem uma variável nula (e existente) será avaliada como false.
— netcoder

12

No seu caso particular: if ($var).

Você precisa usar issetse não souber se a variável existe ou não. Porém, como você o declarou na primeira linha, você sabe que ele existe, portanto, não precisa, não, não deve usar isset.

O mesmo vale para empty, só que emptytambém combina uma verificação da veracidade do valor. emptyé equivalente a !isset($var) || !$vare !emptyé equivalente a isset($var) && $var, ou isset($var) && $var == true.

Se você quiser apenas testar uma variável que deve existir para veracidade , if ($var)é perfeitamente adequado e direto ao ponto.


Este explica muito melhor. Se conseguirmos comparação para todos os outros casos como este !empty is equivalent to isset($var) && $var, seria incrível. Obrigado @deceze
— Vir

6

Você pode apenas usar empty () - como visto na documentação , ele retornará falso se a variável não tiver valor.

Um exemplo nessa mesma 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';
}
?>

Você pode usar isset se quiser apenas saber se não é NULL. Caso contrário, parece que empty () pode ser usado sozinho.


Explicação para o voto negativo? Ele não está perguntando se eles são iguais, ele está perguntando se ele precisa verificar isset antes de verificar vazio.
— Chris

Eu não downvote, mas "uso isset se você quiser saber que não é nulo" não é correto: $var = null; isset( $var ) == true.
— JJJ

Do Manual do PHP5 / 4: isset () - "Determine se uma variável está definida e não é NULL." us.php.net/manual/en/function.isset.php
— chris

2

Aqui estão as saídas de isset()e empty()para as 4 possibilidades: não declarado, nulo, falso e verdadeiro.

$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) } 

Você notará que todos os resultados de 'isset' são opostos aos resultados 'vazios', exceto pelo caso $b=false. Todos os valores (exceto nulo que não é um valor, mas um não valor) avaliados como falso retornarão verdadeiro quando testado por issete falso quando testado por 'vazio'.

Portanto, use isset()quando estiver preocupado com a existência de uma variável. E use emptyquando estiver testando para verdadeiro ou falso. Se o tipo real de assuntos vazio, uso is_nulle ===0, ===false, ===''.


1

Vazio retorna verdadeiro se var não estiver definido. Mas isset retorna verdadeiro mesmo se var não estiver vazio.


-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 é um exemplo simples. Espero que ajude.

editar: adicionado issetno caso de uma variável não ser definida como acima, causaria um erro, verificando se seu primeiro conjunto, pelo menos, ajudará a remover algumas dores de cabeça no caminho.


7
strlen abaixo de zero? Eu quero ver essa corda.
— deceze

@deceze Apenas um exemplo aproximado :) OK use = 0 não <0
— Akos
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.