Do sprawdzania wartości null
i logicznego fałszu służy operator ===
.
Luźny system kontroli typów języka PHP zapewnia wiele sposobów sprawdzania wartości zmiennych, ale wiąże się z tym też wiele problemów. Operator ==
może fałszywie wskazywać, że dana wartość jest fałszywa lub null
, jeśli jest ona pustym łańcuchem lub liczbą 0
. Funkcja isset()
sprawdza czy zmienna ma wartość różną od null
, ale nie sprawdza logicznej wartości false
.
Funkcja is_null()
niezawodnie sprawdza czy dana wartość jest null
, a funkcja is_bool()
sprawdza czy mamy do czynienia z wartością logiczną (np. false
), ale jest jeszcze lepsze rozwiązanie: operator ===
. Operator ten sprawdza czy dane wartości są identyczne, co w świecie PHP nie jest równoznaczne z równe. Ponadto operator ten jest nieco szybszy od funkcji is_null()
i is_bool()
, a poza tym lepiej od nich wygląda.
Przykład
<?php
$x = 0;
$y = null;
// Czy $x jest null?
if($x == null)
print('Ups! $x ma wartość 0, więc nie jest null!');
// Czy $y jest null?
if(is_null($y))
print('Świetnie, ale da się to sprawdzić szybciej.');
if($y === null)
print('Doskonale!');
// Czy łańcuch abc zawiera znak a?
if(strpos('abc', 'a'))
// Mam cię! strpos zwraca 0 oznaczające pozycję pierwszego znaku w łańcuchu.
// Ale PHP interpretuje te 0 jako false, więc ta instrukcja drukowania nigdy nie zostanie wykonana!
print('Znalazłem!');
// Rozwiązanie: użyj operatora !== (przeciwieństwo operatora ===) i za jego pomocą sprawdź, czy strpos() zwraca 0, czy logiczną wartość false.
if(strpos('abc', 'a') !== false)
print('Teraz naprawdę to znalazłem!');
?>
Pułapki
- Gdy sprawdzasz wartość zwrotną funkcji, która może zwrócić zarówno
0
jak i logiczną wartośćfalse
, np.strpos()
, zawsze używaj operatorów===
i!==
albo będziesz mieć kłopoty.