Eu tenho uma pergunta sobre NULL
em PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Por que vejo que é nulo quando $a
há uma string vazia? Isso é um bug?
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.
$variable
. O que você quer é realmente:$variable == null
(note a==
)== null
estava combinando a sequência vazia e não apenas nula ou indefinida.$a = ''
é um vaziostring
,false
é um booleano,$a = 0;
é um número inteiro enull
é do tiponull
. 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 comogetName()
, não deve obtê-null
la quando estiver vazia, mas provavelmente uma string vazia$user->getName() === ''
ou$user->getId() === 0
ou$user->isActive === false
. Comportamento pretendido!Como é mostrado na tabela a seguir,
empty($foo)
é equivalente a$foo==null
eis_null($foo)
tem a mesma função de$foo===null
. A tabela também mostra alguns valores complicados em relação ànull
comparação. (ϕ indica variáveis não inicializadas.)Eu nunca uso
empty()
eis_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))
fonte
==null
e===null
.cheque
==
vs===
'' == NULL
retornaria verdadeiro0 == NULL
retornaria verdadeirofalse == null
retornaria verdadeiroenquanto que
'' === NULL
retornaria falso0 === NULL
retornaria falsofalse === NULL
retornaria falsofonte
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:
Lá você pode ver que uma string vazia
""
em comparação comfalse
,0
,NULL
ou""
vai render verdade.Você pode usar
is_null
[docs] ou comparar estritamente (terceira tabela).fonte
0
quando 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.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 .fonte
Se você usa
==
, o php trata uma string ou matriz vazia comonull
. Para fazer a distinção entrenull
eempty
, use===
ouis_null
. Assim:if($a === NULL)
ouif(is_null($a))
fonte
PHP 7 isset () vs vazio () vs is_null ()
fonte
Use
empty
- http://php.net/manual/en/function.empty.php .Exemplo:
fonte