O código explicará mais:
$var = 0;
if (!empty($var)){
echo "Its not empty";
} else {
echo "Its empty";
}
O resultado retorna "Está vazio". Eu pensei que empty () verificará se eu já defini a variável e tenho valor dentro. Por que ele retorna "Está vazio"?
empty
é talvez a função PHP mais útil, mas amplamente incompreendida. Aprenda como e quando usá-lo.empty
é essencialmente uma abreviação deisset($var) && $var != false
. Você deve estar segurando seuempty
muito estranho para dar um tiro no pé com isso. ; Pfalse
sem acionar um erro de "variável indefinida" é inútil? Bem, acho que você nunca faz isso ... 3) Escolher a função errada em um contexto de segurança não significa que a função em si seja ruim, inútil ou inconsistente; significa apenas que alguém escolheu a função errada para o trabalho.empty()
, provavelmente tem o nome errado.Respostas:
http://php.net/empty
Observe que esta é exatamente a mesma lista de uma coerção para booleano
false
.empty
é simplesmente!isset($var) || !$var
. Tente emisset
vez disso.fonte
!empty($var)
, mas observe que não é o mesmo que você escreveu na pergunta. O que usar depende inteiramente de quais valores você deseja considerartrue
. Basta comparar as diferenças entreisset
eempty
e escolher a combinação certa para a situação certa.isset
retornaTrue
se$var=0
. Mas o que você quer dizer comif(isset($var) && $var != 0)
é o mesmo que:empty
'0'
estão sendo tratados como equivalentes0
. Essa é uma filosofia de design principal do PHP. Concordo que esta é uma escolha extremamente discutível, no entanto, não estou aqui para debater essa escolha com você. Dentro da lógica do PHP,empty
o equivalente a== false
menos avisos é bom para IMO. Que algumas coisas devam ser muito diferentes no PHP é um tópico diferente.Fiquei me perguntando por que ninguém sugeriu a tabela de comparação de tipos extremamente útil . Responde a todas as perguntas sobre as funções comuns e compara operadores.
Um trecho:
Junto com outras folhas de dicas, eu sempre mantenho uma cópia impressa desta tabela em minha mesa, caso não tenha certeza
fonte
No caso de valores numéricos, você deve usar a função is_numeric:
fonte
Use em
strlen()
vez disso. Corri para o mesmo problema usando 1/0 como valores possíveis para algumas variáveis. Estou usandoif (strlen($_POST['myValue']) == 0)
para testar se há um caractere ou não na minha variável.fonte
@strlen
. Contanto que você passe uma variável, ela não deve gerar um erro. Se o seu strlen é esvaziar ele irá gravar o valor como 0.Recentemente, eu fui pego de calças nessa também. O problema com o qual lidamos frequentemente são variáveis não definidas - digamos, um elemento de formulário que pode ou não estar lá, mas para muitos elementos
0
(ou a string'0'
que passaria pelo post com mais precisão, mas ainda seria avaliada como "falsey") ) é um valor legítimo, digamos em uma lista suspensa.usar
empty()
primeiro e depoisstrlen()
é o melhor possível, se você precisar disso também, como:fonte
Do ponto de vista linguístico, o vazio tem um significado sem valor . Como os outros disseram, você precisará usar
isset()
para verificar se uma variável foi definida, e é isso que você faz.fonte
0
versusnull
com facilidade. Obrigado!empty()
retorna true para tudo o que é avaliadoFALSE
, na verdade é um 'não' (!
) disfarçado. Eu acho que você quis dizerisset()
fonte
Para aceitar 0 como um valor na variável use
isset
Verifique se a variável está vazia
Verifique se a variável está definida
fonte
Está trabalhando para mim!
fonte
Os seguintes itens são considerados vazios:
Do manual do PHP
No seu caso
$var
é0
, por issoempty($var)
vai voltartrue
, você está negando o resultado antes de testá-lo, de modo que o bloco else será executado dando "Its empty
" como saída.fonte
Do manual: Retorna FALSE se var tiver um valor não vazio e diferente de zero.
Os seguintes itens são considerados vazios:
Mais: http://php.net/manual/en/function.empty.php
fonte
No meu caso, esse código funcionou.
fonte
Na verdade, isset apenas verifique se a variável está configurada ou não.Neste caso, se você deseja verificar se sua variável é realmente zero ou vazia, você pode usar este exemplo:
apenas para aviso $ myVar == 0 age como uma função vazia.
fonte
Vazio deve significar vazio ... o que deceze diz.
Quando eu faço
Eu espero isso
var_dump(empty($var));
retorne falso.se você estiver verificando as coisas em uma matriz, sempre precisará fazer
isset($var)
primeiro.fonte
use apenas em
($_POST['input_field_name'])!=0
vez de!($_POST['input_field_name'])==0
0 não é tratado como vazio.fonte
Não tenho certeza se ainda há pessoas procurando uma explicação e uma solução. Os comentários acima dizem tudo sobre as diferenças entre VERDADEIRO / FALSO / 1 / 0.
Gostaria apenas de trazer meus 2 centavos para a maneira de exibir o valor real.
BOLEANO
Se você estiver trabalhando com um tipo de dados booleano, estará procurando um resultado VERDADEIRO vs. FALSO; se você armazená-lo no MySQL, ele será armazenado como 1 resp. 0 (se não me engano, é o mesmo na memória do seu servidor).
Portanto, para exibir o valor em PHP, você precisa verificar se é verdadeiro (1) ou falso (0) e exibir o que quiser: "TRUE" ou "FALSE" ou, possivelmente, "1" ou "0".
Atenção, tudo maior (ou diferente) que 0 também será considerado VERDADEIRO no PHP. Por exemplo: 2, "abc", etc. retornarão VERDADEIRO.
BIT, TINYINT
Se você estiver trabalhando com um tipo de dados numérico, a maneira como ele é armazenado é a mesma.
Para exibir o valor, você precisa dizer ao PHP para manipulá-lo como um número. A maneira mais fácil que encontrei é multiplicá-lo por 1.
fonte
exemplo apropriado. basta criar o campo int type (exemplo número de celular) no banco de dados e enviar um valor em branco para o banco de dados a seguir através de um formulário ou apenas inserir usando SQL. o que será salvo no banco de dados 0 porque é do tipo int e não pode ser salvo como em branco ou nulo. portanto, ele está vazio, mas será salvo como 0. portanto, quando você busca dados através do PHP e verifica os valores vazios. é muito útil e logicamente correto.
0,00, 0,000, 0,0000 .... 0,0 ... 0 também está vazio e o exemplo acima também pode ser usado para armazenar diferentes tipos de valores no banco de dados, como float, double, decimal (decimal tem variantes diferentes como 0,000 e assim por diante).
fonte
Você precisa usar isset () para verificar se o valor está definido.
fonte