Mam pytanie dotyczące NULL
w PHP:
$a = '';
if($a == NULL) {
echo 'is null';
}
Dlaczego widzę, że jest pusty, gdy $a
jest pusty ciąg? Czy to błąd?
To czego szukasz to:
if($variable === NULL) {...}
Uwaga ===
.
Kiedy używasz ==
, tak jak zrobiłeś, PHP traktuje NULL , false , 0 , pusty ciąg i puste tablice jako równe.
$variable
. To, czego chcesz, to:$variable == null
(zwróć uwagę==
)== null
do pustego ciągu, a nie tylko są puste lub niezdefiniowane.$a = ''
jest pustymstring
,false
boolowskim,$a = 0;
jest liczbą całkowitą inull
pochodzi z typunull
. OP mówi, że PHP wątkuje je jako „takie same” pod względem wartości, ale nie jako „takie same” pod względem typu. Dlatego ścisła===
kontrola sprawdzi także typ i zakończy się niepowodzeniem, jeśli użyjesz innych. To jest powód, dla którego powinieneś być konsekwentny w swoich wartościach zwracanych. Jeśli normalnie zwrócisz ciąg znaków w metodzie takiej jakgetName()
, nie powinieneś dostać,null
gdy jest pusty, ale bardziej prawdopodobne jest ciąg pusty$user->getName() === ''
lub$user->getId() === 0
lub$user->isActive === false
. Zamierzone zachowanie!Jak pokazano w poniższej tabeli,
empty($foo)
jest równoważne$foo==null
iis_null($foo)
pełni tę samą funkcję$foo===null
. Tabela pokazuje również pewne trudne wartości dotyczącenull
porównania. (ϕ oznacza niezainicjowane zmienne.)Nigdy nie używam
empty()
i nieis_null()
działam. Korzystanie z prostego porównania jest mniej dwuznaczne, szybsze i czystsze. W szczególności będzie mniej pasujących nawiasów klamrowych.np.
if($x==null || $y==null)
vsif(is_null($x) || is_null($y))
źródło
==null
i===null
.sprawdź
==
vs===
'' == NULL
zwróci prawdę0 == NULL
zwróci prawdęfalse == null
zwróci prawdęnatomiast
'' === NULL
zwróci fałsz0 === NULL
zwróci fałszfalse === NULL
zwróci fałszźródło
Nie, to nie jest błąd. Spójrz na luźne porównania z tabelą == (druga tabela), która pokazuje wynik porównania każdej wartości w pierwszej kolumnie z wartościami w innych kolumnach:
Nie widać, że pusty ciąg
""
w porównaniu zfalse
,0
,NULL
czy""
przyniesie prawdziwe.Możesz zamiast tego użyć
is_null
[dokumentów] lub ścisłego porównania (trzecia tabela).źródło
0
rzutowany na ciąg: codepad.org/qi40SG3E . Tak(int)"php" == 0
.To nie jest błąd, ale normalne zachowanie PHP. Dzieje się tak, ponieważ
==
operator w PHP nie sprawdza typu.Jeśli chcesz również sprawdzić, czy wartości mają ten sam typ, użyj
===
zamiast tego. Aby głęboko przestudiować tę różnicę, przeczytaj oficjalną dokumentację .źródło
Jeśli używasz
==
, php traktuje pusty ciąg lub tablicę jakonull
. Aby dokonać rozróżnienia pomiędzynull
aempty
, użyj===
lubis_null
. Więc:if($a === NULL)
lubif(is_null($a))
źródło
PHP 7 isset () vs empty () vs is_null ()
źródło
Użyj
empty
- http://php.net/manual/en/function.empty.php .Przykład:
źródło