Który z typów wspieranych przez język PHP służy do obsługi zmiennych logicznych?
A. Float
B. String
C. Boolean
D. Integer
Pytanie z egzaminu CKE, czerwiec 2021 (arkusz E.14-SG-21.06).
Typ Boolean służy w PHP do przechowywania wartości logicznych, czyli takich, które mają tylko dwa możliwe stany: true albo false. To jest bardzo ważny typ danych, bo na nim opiera się większość warunków w programie. Na przykład zmienna $czyZalogowany = true; może informować, że użytkownik jest już zalogowany, a $maUprawnienia = false; że nie ma dostępu do panelu administracyjnego. Potem takie zmienne wykorzystuje się w instrukcjach if, pętlach while, walidacji formularzy czy kontroli dostępu. W praktyce webowej Boolean pojawia się cały czas: czy formularz przeszedł walidację, czy plik został wysłany, czy użytkownik zaakceptował regulamin, czy zapytanie do bazy się powiodło. W PHP często mówi się też o typie bool, bo taka nazwa jest używana np. przy deklarowaniu typów w nowoczesnym kodzie. Boolean to nazwa opisowa, a bool to skrócona forma stosowana w składni. Moim zdaniem warto od razu kojarzyć ten typ z decyzjami w programie, bo wtedy łatwiej pisać czytelny kod. Dobra praktyka jest taka, żeby zmiennym logicznym nadawać nazwy sugerujące pytanie, np. $isActive, $hasAccess albo po polsku $czyAktywny. Dzięki temu od razu wiadomo, że zmienna ma wartość prawda/fałsz, a nie liczbę czy tekst.
W PHP zmienne logiczne nie są obsługiwane przez typ Float, Integer ani String, chociaż w praktyce początkujący często mylą te pojęcia, bo PHP potrafi automatycznie konwertować wartości między typami. Float służy do przechowywania liczb zmiennoprzecinkowych, na przykład 3.14, 0.5 albo wyniku dzielenia, który nie jest liczbą całkowitą. Taki typ przydaje się przy cenach, pomiarach, procentach lub obliczeniach matematycznych, ale nie opisuje bezpośrednio stanu prawda/fałsz. Integer to liczba całkowita, np. 0, 1, 25 albo -7. Czasem ktoś kojarzy 0 z false, a 1 z true, bo w wielu językach i bazach danych tak się to zapisuje, ale to nadal nie znaczy, że Integer jest typem logicznym. To tylko możliwa konwersja lub umowny zapis. String natomiast przechowuje tekst, czyli np. nazwę użytkownika, adres e-mail albo napis false. I tutaj jest ciekawa pułapka: tekst false nie jest tym samym co wartość logiczna false. To ciąg znaków, a nie prawdziwy stan logiczny. Z mojego doświadczenia takie pomyłki potem prowadzą do dziwnych błędów w instrukcjach if, szczególnie gdy kod sprawdza pusty napis, zero albo tekstową wartość pobraną z formularza. W dobrym, czytelnym kodzie warto rozdzielać znaczenie danych: liczby zapisujemy jako Integer albo Float, tekst jako String, a decyzje i warunki jako Boolean, czyli true lub false. Dzięki temu program jest bardziej przewidywalny i łatwiejszy do debugowania, no i mniej człowiek walczy z automatycznym rzutowaniem typów w PHP.