Jaką wartość zwróci w PHP funkcja isset($a), gdy zmienna $a ma wartość liczbową 0?
A.
TRUEB.
FALSEC.
NULLD.
0Funkcja isset($a) w PHP zwróci TRUE, ponieważ zmienna $a istnieje i jej wartość nie jest równa NULL. To jest najważniejsza zasada: isset nie sprawdza, czy wartość jest „prawdziwa” w sensie logicznym, tylko czy zmienna została ustawiona i czy nie ma wartości NULL. Liczbowe 0 jest normalną, konkretną wartością, więc dla PHP taka zmienna jest ustawiona. Przykład praktyczny: jeśli po formularzu dostaniesz pole z wartością 0, np. liczba sztuk produktu albo wiek wpisany jako 0 w jakimś teście, to isset nadal uzna, że dane są obecne. W dobrych praktykach PHP często używa się isset przy sprawdzaniu $_POST, $_GET albo elementów tablicy, żeby uniknąć ostrzeżeń typu undefined variable albo undefined array key. Trzeba jednak uważać: isset($a) i empty($a) działają inaczej. Dla $a = 0 funkcja isset($a) zwróci TRUE, ale empty($a) zwróci TRUE, bo 0 jest traktowane jako wartość pusta. Moim zdaniem to jeden z tych szczegółów PHP, które warto naprawdę zapamiętać, bo potem w formularzach i walidacji danych potrafi robić małe, ale upierdliwe błędy.
W tym pytaniu łatwo pomylić działanie isset z oceną wartości w warunku logicznym. W PHP liczba 0 faktycznie bywa traktowana jako FALSE, na przykład w instrukcji if ($a), ale isset($a) nie wykonuje takiej samej kontroli. Ta funkcja nie pyta: czy zmienna ma wartość logicznie prawdziwą?, tylko: czy zmienna istnieje i czy jej wartość nie jest NULL?. Skoro $a ma wartość liczbową 0, to zmienna została ustawiona, a jej wartość nie jest NULL, więc wynik to TRUE. Odpowiedź 0 jest myląca, bo funkcja isset zwraca wartość boolowską, a nie zawartość sprawdzanej zmiennej. Ona nie oddaje tego, co znajduje się w $a, tylko informuje o stanie zmiennej. NULL też nie pasuje, ponieważ NULL może być wartością zmiennej, ale nie jest typowym wynikiem isset; przy zmiennej ustawionej na NULL funkcja zwróciłaby FALSE. Z kolei FALSE byłoby poprawne wtedy, gdy zmienna w ogóle nie istnieje albo została ustawiona właśnie na NULL. Typowy błąd myślowy polega na wrzucaniu do jednego worka wartości 0, FALSE, pustego tekstu i NULL. W PHP one mogą zachowywać się podobnie w niektórych warunkach, ale przy isset różnica jest konkretna i ważna. W praktyce, zwłaszcza przy obsłudze formularzy i danych wejściowych, trzeba rozróżniać isset, empty oraz porównania typu ===, bo inaczej można przypadkiem odrzucić poprawną wartość 0, np. cenę promocyjną, liczbę sztuk albo wybraną opcję formularza.