Existe uma diferença entre isset
e !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?
isset($vars[1]) AND !empty($vars[1])
Existe uma diferença entre isset
e !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?
isset($vars[1]) AND !empty($vars[1])
Respostas:
Isso é completamente redundante. empty
é mais ou menos uma abreviação para !isset($foo) || !$foo
, e !empty
é análogo a isset($foo) && $foo
. Ou seja, empty
faz o inverso de isset
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:
empty()
é o oposto de(boolean) var
, exceto que nenhum aviso é gerado quando a variável não está configurada.
Você pode simplesmente usar !empty($vars[1])
aqui.
$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, mas echo $vars[1]
causará. Eu verifiquei o fato usando echo $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;
.
0
como false
. 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.
<?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";
}
?>
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:
<?php
$s = '';
print "isset: '" . isset($s) . "'. ";
print "!empty: '" . !empty($s) . "'";
?>
isset
é equivalente a !empty
.
$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 (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)
while isset verifique se a variável isset e não nula também podem ser encontradas no php doc (isset)
Não é necessário.
Nenhum aviso será gerado se a variável não existir. Isso significa que empty () é essencialmente o equivalente conciso a! Isset ($ var) || $ var == false.
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.
+-----------+---------+---------+----------+---------------------+
| Var value | empty() | isset() | !empty() | isset() && !empty() |
+-----------+---------+---------+----------+---------------------+
| '' | true | true | false | false |
| ' ' | false | true | true | true |
| false | true | true | false | false |
| true | false | true | true | true |
| array () | true | true | false | false |
| NULL | true | false | false | false |
| '0' | true | true | false | false |
| 0 | true | true | false | false |
| 0.0 | true | true | false | false |
| undefined | true | false | false | false |
+-----------+---------+---------+----------+---------------------+
E código
$var1 = "";
$var2 = " ";
$var3 = FALSE;
$var4 = TRUE;
$var5 = array();
$var6 = null;
$var7 = "0";
$var8 = 0;
$var9 = 0.0;
function compare($var)
{
print(var_export($var, true) . "|" .
var_export(empty($var), true) . "|" .
var_export(isset($var), true) . "|" .
var_export(!empty($var), true) . "|" .
var_export(isset($var) && !empty($var), true) . "\n");
}
for ($i = 1; $i <= 9; $i++) {
$var = 'var' . $i;
compare($$var);
}
@print(var_export($var10, true) . "|" .
var_export(empty($var10), true) . "|" .
var_export(isset($var10), true) . "|" .
var_export(!empty($var10), true) . "|" .
var_export(isset($var10) && !empty($var10), true) . "\n");
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.
"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.
se usarmos a mesma página para adicionar / editar via botão enviar, como abaixo
<input type="hidden" value="<?echo $_GET['edit_id'];?>" name="edit_id">
então não devemos usar
isset($_POST['edit_id'])
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ção
!empty($_POST['edit_id'])
empty()
função:Retorna FALSE
se var
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 a empty()
função.
isset()
função retorna:Retorna TRUE
se var
existir; FALSE
de outra forma.
Em outras palavras, apenas variáveis que não existem (ou variáveis com NULL
valores estritamente ) retornarão FALSE
à isset()
função. Todas as variáveis que possuem qualquer tipo de valor, seja 0
uma sequência de texto em branco, etc. serão retornadas TRUE
.