Onde devo usar isset () e! Empty ()


105

Eu li em algum lugar que a isset()função trata uma string vazia como TRUE, portanto, não isset()é uma maneira eficaz de validar entradas de texto e caixas de texto de um formulário HTML.

Portanto, você pode usar empty()para verificar se um usuário digitou algo.

  1. É verdade que a isset()função trata uma string vazia como TRUE?

  2. Então, em que situações devo usar isset()? Devo usar sempre !empty()para verificar se há algo?

Por exemplo, em vez de

if(isset($_GET['gender']))...

Usando este

if(!empty($_GET['gender']))...

Respostas:


135

isset vs.! empty

FTA:

"isset () verifica se uma variável tem um valor incluindo (False, 0 ou string vazia), mas não NULL. Retorna TRUE se var existir; FALSE caso contrário.

Por outro lado, a função empty () verifica se a variável tem um valor vazio string vazia, 0, NULL ou False. Retorna FALSE se var tiver um valor não vazio e diferente de zero. "


47
FTA: Do Artigo
Jianxin Gao

5
empty()também retorna verdadeiro para uma matriz vazia.
Mitya

Mesmo que empty()retorne TRUE para 0, não é uma boa ideia usar esse operador para matemática no caso de "0" ser acidentalmente uma string. Isso pode ser perigoso. Em vez disso, use básica >, <e ==operadores e variáveis converter usando intval()ou floatval().
Kaleazy

32

Da maneira mais geral:

  • issettesta se uma variável (ou um elemento de uma matriz, ou uma propriedade de um objeto) existe (e não é nula)
  • empty testa se uma variável (...) contém alguns dados não vazios.


Para responder à pergunta 1 :

$str = '';
var_dump(isset($str));

boolean true

Porque a variável $strexiste.


E a pergunta 2 :

Você deve usar isset para determinar se uma variável existe ; por exemplo, se você está obtendo alguns dados como um array, pode ser necessário verificar se uma chave é definida nesse array.
Pense em $_GET/ $_POST, por exemplo.

Agora, trabalhar em seu valor, quando você sabe que existe tal valor: esse é o trabalho de empty.


11

Nenhuma é uma boa maneira de verificar se há entradas válidas.

  • isset() não é suficiente porque - como já foi observado - considera uma string vazia como um valor válido.
  • ! empty() também não é suficiente porque rejeita '0', que poderia ser um valor válido.

O uso isset()combinado com uma verificação de igualdade em uma string vazia é o mínimo necessário para verificar se um parâmetro de entrada tem um valor sem criar falsos negativos:

if( isset($_GET['gender']) and ($_GET['gender'] != '') )
{
  ...
}

Mas por "mínimo", quero dizer exatamente isso. Tudo o que o código acima faz é determinar se há algum valor para $_GET['gender']. Ele não determina se o valor de $_GET['gender']é válido (por exemplo, um de ).("Male", "Female","FileNotFound")

Para isso, veja a resposta de Josh Davis .


Como você está usando uma comparação livre, seu snippet sugerido fornecerá falsos positivos ao lidar com um valor não string zero-ish / falsey. 3v4l.org/aIWqA
mickmackusa

11

issetdestina-se a ser usado apenas para variáveis ​​e não apenas valores, portanto, isset("foobar")gerará um erro. A partir do PHP 5.5, emptysuporta variáveis ​​e expressões.

Portanto, sua primeira pergunta deve ser se issetretorna verdadeiro para uma variável que contém uma string vazia. E a resposta é:

$var = "";
var_dump(isset($var));

As tabelas de comparação de tipo no manual do PHP são bastante úteis para essas questões.

issetbasicamente verifica se uma variável tem qualquer valor diferente de nulo, uma vez que variáveis ​​não existentes sempre têm o valor nulo . emptyé uma espécie de contra-parte, issetmas também trata o valor inteiro 0e o valor da string "0"como vazios. (Novamente, dê uma olhada nas tabelas de comparação de tipo .)


1
Observe que empty()também "suporta expressões, ao invés de apenas variáveis" a partir do PHP 5.5.0.
ComFreek

8

Se você tiver um $ _POST ['param'] e assumir o tipo de string, então

isset($_POST['param']) && $_POST['param'] != '' && $_POST['param'] != '0'

é idêntico a

!empty($_POST['param'])

4

isset () não é uma forma eficaz de validar entradas de texto e caixas de texto de um formulário HTML

Você pode reescrever isso como "isset () não é uma forma de validar a entrada." Para validar a entrada, use a extensão de filtro do PHP . filter_has_var()dirá se a variável existe enquanto filter_input()irá filtrar e / ou higienizar a entrada.

Observe que você não precisa usar filter_has_var()antes de filter_input()e se solicitar uma variável que não esteja definida, filter_input()simplesmente retornará null.


3

Quando e como usar:

  1. isset ()

Verdadeiro para 0, 1, string vazia, uma string contendo um valor, verdadeiro, falso

Falso para nulo

por exemplo

$status = 0
if (isset($status)) // True
$status = null 
if (isset($status)) // False
  1. Vazio

False para 1, uma string contendo um valor, true

Verdadeiro para nulo, string vazia, 0, falso, por exemplo

$status = 0
if(empty($status)) // true
$status = 1
if(empty($status)) // False

2

isset é usado para determinar se existe uma instância de algo, isto é, se uma variável foi instanciada ... não está preocupado com o valor do parâmetro ...

Pascal MARTIN ... +1 ...

empty () não gera um aviso se a variável não existe ... portanto, isset () é preferível ao testar a existência de uma variável quando você pretende modificá-la ...


1

emptyBasta usar :

if(!empty($variable)){
    // Do stuff
}

Além disso, se você quiser um valor inteiro, também pode valer a pena verificar isso intval($variable) !== FALSE.


2
Além disso, intval () nunca retorna FALSE.
Josh Davis

1
NÃO é suficiente, pois '0' é uma string válida, mas não para empty... isset/ filter_has_vardeve ser usado para verificar se var existe.
Yousha Aleayoub

1
isset($variable) === (@$variable !== null)
empty($variable) === (@$variable == false)

1

Vim aqui em busca de uma maneira rápida de verificar se uma variável tem algum conteúdo. Nenhuma das respostas aqui forneceu uma solução completa, então aqui está:


Basta verificar se a entrada é ''ou null, porque:

Solicitar .../test.php?var=resultados de URL em$_GET['var'] = ''

Solicitar .../test.phpresultados de URL em$_GET['var'] = null


isset()retorna falseapenas quando a variável existe e não está definida como null, portanto, se você usá-la, obterá truestrings vazias ( '').

empty()considera nulle ''vazio, mas também considera '0'vazio, o que é um problema em alguns casos de uso.

Se você quiser tratar '0'como vazio, use empty(). Caso contrário, use a seguinte verificação:

$var .'' !== ''avalia como falseapenas para as seguintes entradas:

  • ''
  • null
  • false

Eu uso a seguinte verificação para também filtrar strings com apenas espaços e quebras de linha:

function hasContent($var){
    return trim($var .'') !== '';
}

0

Eu uso o seguinte para evitar avisos, isso verifica se o var está declarado em GET ou POST e com o prefixo @ você pode verificar com segurança se não está vazio e evitar o aviso se var não estiver definido:

if( isset($_GET['var']) && @$_GET['var']!='' ){
    //Is not empty, do something
}

O "operador stfu" ( @) não deve ser encorajado e não é necessário para o seu snippet. Esta não é uma boa resposta. Você está fazendo uma comparação vaga. Você também pode usar !empty().
mickmackusa

1
Ooo cara ... Isso é ótimo para o exemplo de codificação ruim. @vai lhe dar problemas com a depuração, o impacto da página é mais lento e você ainda pode ter error_logmais de 1 GB em um momento. Basta ser inteligente e usar !empty(), !is_null()ou algo parecido.
Ivijan Stefan Stipić

0

isset () é usado para verificar se a variável está definida com o valor ou não e Empty () é usado para verificar se uma determinada variável está vazia ou não.

isset () retorna verdadeiro quando a variável não é nula, enquanto Empty () retorna verdadeiro se a variável é uma string vazia.


0
    $var = '';
// 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';
    }

Fonte: Php.net




0

! empty fará o truque. se você precisa apenas verificar se os dados existem ou não então use isset outro vazio pode lidar com outras validações

<?php
$array = [ "name_new" => "print me"];

if (!empty($array['name'])){
   echo $array['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array2 = [ "name" => NULL];

if (!empty($array2['name'])){
   echo $array2['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array3 = [ "name" => ""];

if (!empty($array3['name'])){
   echo $array3['name'];
}

//output : {nothing}  

////////////////////////////////////////////////////////////////////

$array4 = [1,2];

if (!empty($array4['name'])){
   echo $array4['name'];
}

//output : {nothing}

////////////////////////////////////////////////////////////////////

$array5 = [];

if (!empty($array5['name'])){
   echo $array5['name'];
}

//output : {nothing}

?>

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.