Existe uma diferença entre issete !empty. Se eu fizer essa verificação booleana dupla, ela está correta ou é redundante? e existe uma maneira mais curta de fazer a mesma coisa?
Os complementos exatos óbvios são isset e is_null, mas! Empty cobre alguns diferentes. Tudo depende do tipo de dados que você está testando.
Jeff Clayton
Respostas:
420
Isso é completamente redundante. emptyé mais ou menos uma abreviação para !isset($foo) || !$foo, e !emptyé análogo a isset($foo) && $foo. Ou seja, emptyfaz o inverso de issetmais uma verificação adicional da veracidade de um valor.
Ou, em outras palavras, emptyé o mesmo que !$foo, mas não lança avisos se a variável não existir. Esse é o ponto principal dessa função: faça uma comparação booleana sem se preocupar com a variável que está sendo configurada.
O @karim IMO emptyé uma das funções mais incompreendidas do PHP. O pequeno trecho sobre "nenhum aviso é gerado" é muito fácil de ignorar. Eu tive que digitalizar a documentação algumas vezes para identificá-la aqui.
deceze
2
empty($vars[1])não causa nenhum aviso que nem $vars[1]esteja definido, mas echo $vars[1]causará. Eu verifiquei o fato usando echo $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;.
Amil Waduwawara
4
@Shahor Muitas línguas consideram 0como false. PHP não é o único. Ainda não tenho certeza de qual é a sua reclamação.
deceze
33
isset() testa se uma variável está definida e não é nula:
A resposta aceita de forma alguma sugere que isso isseté 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';}
Empty just check é a variável / matriz referenciada tem um valor se você verificar o php doc (vazio), verá que isso é considerado vazio
*""(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 verifique se a variável isset e não nula também podem ser encontradas no php doc (isset)
Nenhum aviso será gerado se a variável não existir. Isso significa que empty () é essencialmente o equivalente conciso a! Isset ($ var) || $ var == false.
Isso nunca foi necessário em nenhuma versão do PHP, pois o vazio já verifica (não) o isset. Você está confundindo o fato de que vazio agora suporta expressões com a pergunta.
Alxgb
Isso é verdade, cinco anos depois.
Lennon
2
isset($vars[1]) AND !empty($vars[1])é equivalente a !empty($vars[1]).
Eu preparei um código simples para mostrá-lo empiricamente.
"Vazio": funciona apenas em variáveis. Vazio pode significar coisas diferentes para diferentes tipos de variáveis (consulte o manual: http://php.net/manual/en/function.empty.php ).
"isset": verifica se a variável existe e verifica se há um valor NULL ou falso verdadeiro. Pode ser desabilitado chamando "desabilitado". Mais uma vez, verifique o manual.
O uso de qualquer um deles depende do tipo de variável que você está usando.
Eu diria que é mais seguro verificar os dois, porque você está verificando primeiro se a variável existe e se ela não é realmente NULL ou vazia.
@szahn "mais seguro para verificar os dois", - você como programador pode verificar tudo o que deseja quanto à segurança. Mas se seu código for redundante, você poderá ser redundante como programador.
precisa
0
se usarmos a mesma página para adicionar / editar via botão enviar, como abaixo
post anterior foi enviado bcoz eu pressione enter por engano, aqui está a minha resposta completa ... por que reduzir o voto? :(
diEcho
0
No site PHP, referindo-se à empty()função:
Retorna FALSEse vartiver um valor não vazio e diferente de zero.
Isso é uma coisa boa de saber. Em outras palavras, tudo, de NULL, 0a "" retornará TRUEao usar a empty()função.
Aqui está a descrição do que a isset()função retorna:
Retorna TRUEse varexistir; FALSEde outra forma.
Em outras palavras, apenas variáveis que não existem (ou variáveis com NULLvalores estritamente ) retornarão FALSEà isset()função. Todas as variáveis que possuem qualquer tipo de valor, seja 0uma sequência de texto em branco, etc. serão retornadas TRUE.
Respostas:
Isso é completamente redundante.
empty
é mais ou menos uma abreviação para!isset($foo) || !$foo
, e!empty
é análogo aisset($foo) && $foo
. Ou seja,empty
faz o inverso deisset
mais uma verificação adicional da veracidade de um valor.Ou, em outras palavras,
empty
é o mesmo que!$foo
, mas não lança avisos se a variável não existir. Esse é o ponto principal dessa função: faça uma comparação booleana sem se preocupar com a variável que está sendo configurada.O manual coloca assim:
Você pode simplesmente usar
!empty($vars[1])
aqui.fonte
$vars[1]
ele receberá um aviso.empty
é uma das funções mais incompreendidas do PHP. O pequeno trecho sobre "nenhum aviso é gerado" é muito fácil de ignorar. Eu tive que digitalizar a documentação algumas vezes para identificá-la aqui.empty($vars[1])
não causa nenhum aviso que nem$vars[1]
esteja definido, masecho $vars[1]
causará. Eu verifiquei o fato usandoecho $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;
.0
comofalse
. PHP não é o único. Ainda não tenho certeza de qual é a sua reclamação.isset()
testa se uma variável está definida e não é nula:http://us.php.net/manual/en/function.isset.php
empty()
pode retornar true quando a variável estiver configurada para determinados valores:http://us.php.net/manual/en/function.empty.php
Para demonstrar isso, tente o seguinte código com $ the_var não atribuído, defina como 0 e defina 1.
fonte
A resposta aceita não está correta.
isset () NÃO é equivalente a! empty ().
Você criará alguns erros bastante desagradáveis e difíceis de depurar se seguir esta rota. por exemplo, tente executar este código:
https://3v4l.org/J4nBb
fonte
isset
é equivalente a!empty
.fonte
Empty just check é a variável / matriz referenciada tem um valor se você verificar o php doc (vazio), verá que isso é considerado vazio
while isset verifique se a variável isset e não nula também podem ser encontradas no php doc (isset)
fonte
Não é necessário.
php.net
fonte
isset($vars[1]) AND !empty($vars[1])
é equivalente a!empty($vars[1])
.Eu preparei um código simples para mostrá-lo empiricamente.
A última linha é variável indefinida.
E código
A variável indefinida deve ser avaliada fora da função, porque a própria função cria uma variável temporária no próprio escopo.
fonte
"Vazio": funciona apenas em variáveis. Vazio pode significar coisas diferentes para diferentes tipos de variáveis (consulte o manual: http://php.net/manual/en/function.empty.php ).
"isset": verifica se a variável existe e verifica se há um valor NULL ou falso verdadeiro. Pode ser desabilitado chamando "desabilitado". Mais uma vez, verifique o manual.
O uso de qualquer um deles depende do tipo de variável que você está usando.
Eu diria que é mais seguro verificar os dois, porque você está verificando primeiro se a variável existe e se ela não é realmente NULL ou vazia.
fonte
se usarmos a mesma página para adicionar / editar via botão enviar, como abaixo
então não devemos usar
bcoz
edit_id
é definido o tempo todo, seja na página de adição ou edição, em vez disso, devemos usar a verificação abaixo da condiçãofonte
empty()
função:Retorna
FALSE
sevar
tiver um valor não vazio e diferente de zero.Isso é uma coisa boa de saber. Em outras palavras, tudo, de
NULL
,0
a "" retornaráTRUE
ao usar aempty()
função.isset()
função retorna:Retorna
TRUE
sevar
existir;FALSE
de outra forma.Em outras palavras, apenas variáveis que não existem (ou variáveis com
NULL
valores estritamente ) retornarãoFALSE
àisset()
função. Todas as variáveis que possuem qualquer tipo de valor, seja0
uma sequência de texto em branco, etc. serão retornadasTRUE
.fonte