Lekcja 3. Instrukcje warunkowe w PHP (if, else, switch)
PodstawowyPo co się tego uczymy?
Formularz logowania musi sprawdzić, czy hasło się zgadza. Sklep musi sprawdzić, czy produkt jest dostępny. Prawie każda decyzja w programie internetowym to instrukcja warunkowa — bez niej PHP wykonywałby zawsze dokładnie to samo, niezależnie od danych.
Teoria
Instrukcje warunkowe pozwalają programowi podejmować decyzje — "jeśli coś jest prawdą, zrób X, w przeciwnym razie zrób Y".
Składnia if/else w PHP:
if (warunek) { ... } elseif (inny_warunek) { ... } else { ... }
Operatory porównania: == (równe, ale luźno — "5" == 5 to true), === (identyczne — sprawdza też typ, "5" === 5 to false), !=, !==, <, >, <=, >=.
Operatory logiczne: && (AND), || (OR), ! (NOT).
Do wielu wariantów tej samej zmiennej lepiej pasuje switch:
switch () {
case 6: echo "Celujący"; break;
case 5: echo "Bardzo dobry"; break;
default: echo "Inna ocena";
}
Dobra praktyka: w PHP prawie zawsze używaj === zamiast == — porównanie "luźne" (==) potrafi zaskoczyć (np. "0" == false to true), a to częste źródło błędów trudnych do znalezienia.
Przykład z życia
Wchodzisz na stronę z filmem oznaczonym kategorią wiekową. Zanim strona pokaże Ci przycisk "Odtwórz", PHP (albo JavaScript) sprawdza warunek: czy Twój wiek pozwala na obejrzenie tego materiału.
Kod (PHP)
<?php
$wiek = 16;
$maZgodeRodzica = true;
if ($wiek >= 18) {
echo "Możesz obejrzeć ten film samodzielnie.";
} elseif ($wiek >= 13 && $maZgodeRodzica) {
echo "Możesz obejrzeć ten film za zgodą rodzica.";
} else {
echo "Ten film nie jest dla Ciebie.";
}
echo "<br>";
$kategoriaWiekowa = "PG-13";
switch ($kategoriaWiekowa) {
case "G":
echo "Film dla każdego.";
break;
case "PG-13":
echo "Film dla widzów od 13 lat.";
break;
case "R":
echo "Film tylko dla dorosłych.";
break;
default:
echo "Nieznana kategoria.";
}
Komentarz i wyjaśnienie kodu
Pierwszy blok if/elseif/else sprawdza dwa warunki po kolei — PHP wykonuje TYLKO PIERWSZY pasujący blok, resztę pomija. Zwróć uwagę na && (AND) w drugim warunku — oba warunki (wiek >= 13 ORAZ zgoda rodzica) muszą być prawdziwe naraz. Drugi fragment pokazuje switch — dużo czytelniejszy niż seria elseif, gdy sprawdzasz wiele konkretnych wartości TEJ SAMEJ zmiennej. break na końcu każdego case jest konieczny — bez niego PHP "przeleciałby" też przez kolejne warianty.
Ćwiczenie samodzielne
Dodaj do przykładu trzeci poziom kategorii wiekowej "NC-17" w switch, z odpowiednim komunikatem.
Zadania do pracy własnej
Napisz skrypt sprawdzający, czy podana z góry liczba (zmienna) jest parzysta czy nieparzysta, i wypisujący odpowiedni komunikat.
Napisz skrypt kalkulatora rabatu: jeśli wartość koszyka (zmienna) przekracza 200 zł, przyznaj 10% rabatu, w przeciwnym razie 0%. Wypisz cenę końcową.
Napisz skrypt oceniający ocenę filmu (zmienna z liczbą gwiazdek 1-5) za pomocą switch, wypisujący słowny komentarz dla każdej wartości (np. 5 = "Arcydzieło", 1 = "Nie polecam") oraz domyślny komunikat dla nieprawidłowej wartości (np. 0 albo 6).
Typowe błędy
Częsty błąd to użycie = (przypisanie) zamiast == albo === (porównanie) w warunku if — if ($x = 5) zawsze będzie prawdziwe, bo to PRZYPISUJE 5 do $x, a nie porównuje. Drugi błąd: zapomnienie break w switch, przez co program "spada" do kolejnych case. Trzeci: użycie == zamiast === tam, gdzie typ danych ma znaczenie, co prowadzi do zaskakujących wyników przy porównaniach tekstu z liczbą.
Nawiązanie do egzaminu zawodowego
To realizacja efektu INF.03.5.2.5 ("stosuje instrukcje sterujące skryptowych języków programowania") — bezpośrednio sprawdzane w części praktycznej egzaminu przy analizie i pisaniu kodu PHP.