Eu tenho uma pergunta sobre NULLem PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Por que vejo que é nulo quando $ahá uma string vazia? Isso é um bug?
Eu tenho uma pergunta sobre NULLem PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Por que vejo que é nulo quando $ahá uma string vazia? Isso é um bug?
Respostas:
O que você está procurando é:
if($variable === NULL) {...}
Observe o ===.
Quando o uso ==, como você fez, PHP trata NULL , falso , 0 , o vazio corda, e vazias matrizes como iguais.
== nullestava combinando a sequência vazia e não apenas nula ou indefinida.
$a = ''é um vazio string, falseé um booleano, $a = 0;é um número inteiro e nullé do tipo null. O que o OP está dizendo é que o PHP os encadeará como "iguais" em valor, mas não como "iguais" em tipo. Portanto, uma verificação rigorosa === também verificará o tipo e falhará se você usar diferentes. Essa é a razão pela qual você deve ter consistência nos seus valores de retorno. Se você normalmente retorna uma string em um método como getName(), não deve obtê- nullla quando estiver vazia, mas provavelmente uma string vazia $user->getName() === ''ou $user->getId() === 0ou $user->isActive === false. Comportamento pretendido!
Como é mostrado na tabela a seguir, empty($foo)é equivalente a $foo==nulle is_null($foo)tem a mesma função de $foo===null. A tabela também mostra alguns valores complicados em relação à nullcomparação. (ϕ indica variáveis não inicializadas.)
empty is_null
==null ===null isset array_key_exists
ϕ | T | T | F | F
null | T | T | F | T
"" | T | F | T | T
[] | T | F | T | T
0 | T | F | T | T
false | T | F | T | T
true | F | F | T | T
1 | F | F | T | T
\0 | F | F | T | T
Eu nunca uso empty()e is_null()funções. Usar comparação simples é menos ambíguo, mais rápido e mais limpo. Particularmente, haverá menos colchetes para combinar.
por exemplo, if($x==null || $y==null)vsif(is_null($x) || is_null($y))
==nulle ===null.
cheque ==vs===
'' == NULLretornaria verdadeiro
0 == NULLretornaria verdadeiro
false == nullretornaria verdadeiro
enquanto que
'' === NULLretornaria falso
0 === NULLretornaria falso
false === NULLretornaria falso
Não, não é um bug. Dê uma olhada na tabela Comparações frouxas com == (segunda tabela), que mostra o resultado da comparação de cada valor na primeira coluna com os valores nas outras colunas:
TRUE FALSE 1 0 -1 "1" "0" "-1" NULL array() "php" ""
[...]
"" FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE
Lá você pode ver que uma string vazia ""em comparação com false, 0, NULLou ""vai render verdade.
Você pode usar is_null [docs] ou comparar estritamente (terceira tabela).
0quando convertida em uma string: codepad.org/qi40SG3E . Então (int)"php" == 0.
Este não é um bug, mas o comportamento normal do PHP. Isso acontece porque o ==operador no PHP não verifica o tipo.
'' == null == 0 == false
Se você também quiser verificar se os valores têm o mesmo tipo, use ===. Para estudar profundamente essa diferença, leia a documentação oficial .
Use empty- http://php.net/manual/en/function.empty.php .
Exemplo:
$a = '';
if(empty($a)) {
echo 'is empty';
}
$variable. O que você quer é realmente:$variable == null(note a==)