Łapka LogoŁapka Infa
🌐
INF.03

Decyzje (If, Else, Switch) w PHP

Instrukcje warunkowe to fundament logiki backendowej. Poznaj if, elseif, switch-case, operatory logiczne oraz pułapkę == i ===.

Instrukcje Warunkowe w PHP

Budowanie logiki decyzyjnej na backendzie w PHP jest bardzo zbliżone do JavaScriptu i C++, ale kryje w sobie kilka specyficznych niuansów, które CKE uwielbia testować na egzaminie INF.03 (oraz dawnym EE.09).


1. Składnia if, elseif oraz else

Podstawowa konstrukcja warunkowa sprawdza, czy wyrażenie w nawiasie ma wartość logiczną true (prawdę). Jeśli tak — wykonuje blok kodu w klamrach {}.

<?php
    $ocena = 4;
    
    if ($ocena >= 5) {
        echo "Świetna robota, stypendium gwarantowane!";
    } elseif ($ocena == 4) {
        // Zwróć uwagę: w PHP 'elseif' zazwyczaj piszemy łącznie!
        echo "Solidny wynik, gratulacje.";
    } elseif ($ocena >= 2) {
        echo "Zdane, ale warto powtórzyć materiał.";
    } else {
        echo "Niestety ocena niedostateczna — poprawka.";
    }
?>

[!TIP] W PHP poprawne są obie formy: pisana łącznie elseif oraz rozdzielnie else if. Standardy kodowania (PSR-12) oraz arkusze CKE rekomendują jednak formę łączną: elseif.


2. Operatory logiczne (&&, ||, !)

Warunki w nawiasie możesz łączyć za pomocą operatorów logicznych:

  • && (ORAZ / AND) – oba warunki muszą być prawdziwe jednocześnie.
  • || (LUB / OR) – wystarczy, że przynajmniej jeden warunek jest spełniony.
  • ! (NEGACJA / NOT) – odwraca wartość logiczną (!true daje false).
<?php
    $wiek = 19;
    $maPrawoJazdy = true;
    
    if ($wiek >= 18 && $maPrawoJazdy) {
        echo "Możesz wypożyczyć samochód.";
    } else {
        echo "Brak uprawnień lub niepełnoletność.";
    }
?>

[!WARNING] W PHP istnieją też słowne operatory and oraz or, ale mają niższy priorytet niż znak przypisania =. Może to prowadzić do bardzo podstępnych błędów! Zawsze używaj symboli && oraz ||.


3. Pułapka Luźnego Porównania: == a ===

To jeden z najważniejszych tematów w całym PHP:

  • == (luźne porównanie) — porównuje tylko wartości, ignorując ich typ (dokonuje tzw. niejawnej konwersji typu).
  • === (ścisłe porównanie) — porównuje zarówno wartość, jak i typ danych!
<?php
    $liczba = 5;       // Integer (Liczba)
    $tekst = "5";      // String (Napis)
    
    // To zwróci TRUE, bo PHP przekonwertuje "5" na liczbę:
    if ($liczba == $tekst) {
        echo "Wartości są równe.<br>";
    }
    
    // To zwróci FALSE, bo typy (int vs string) się nie zgadzają:
    if ($liczba === $tekst) {
        echo "Identyczne!";
    } else {
        echo "Różne typy danych!<br>";
    }
?>

Co w PHP jest fałszem (Falsy values)?

W warunkach logicznych PHP traktuje jako fałsz (false) nie tylko samo false, ale także:

  • Liczbę 0 oraz 0.0
  • Pusty ciąg znaków ""
  • Ciąg znaków zawierający pojedyncze zero "0" (wielka pułapka!)
  • Pustą tablicę array() / []
  • Wartość null

4. Instrukcja switch ... case

Gdy jedna zmienna może przyjąć wiele konkretnych wartości (np. wybór opcji z menu, kategoria produktu, rola użytkownika), zamiast ciągnącego się łańcucha elseif, używamy switch:

<?php
    $rola = "redaktor";
    
    switch ($rola) {
        case "admin":
            echo "Pełny dostęp do panelu.";
            break;
            
        case "redaktor":
            echo "Dostęp do tworzenia i edycji wpisów.";
            break;
            
        case "czytelnik":
            echo "Dostęp wyłącznie do odczytu artykułów.";
            break;
            
        default:
            echo "Nieznana rola użytkownika.";
            break;
    }
?>

[!CAUTION] Pamiętaj o słówku break na końcu każdego przypadku case! Jeśli o nim zapomnisz, PHP wykona kod dla danego przypadku ORAZ dla wszystkich kolejnych poniżej (tzw. zjawisko fall-through). Klauzula default jest opcjonalna, ale działa jak końcowe else — odpala się, gdy żaden case nie pasował.


5. Skrócony zapis: Operator warunkowy (?:) i Null Coalescing (??)

Na egzaminie i w codziennej pracy z formularzami $_POST przydają się dwa operatory skracające kod:

  1. Operator trójargumentowy (Ternary Operator):
<?php
    $wiek = 20;
    $status = ($wiek >= 18) ? "Pełnoletni" : "Niepełnoletni";
    echo $status;
?>
  1. Operator łączenia wartości null (??): Zabezpiecza przed błędem Undefined array key, gdy pole formularza nie zostało przesłane:
<?php
    // Jeśli $_POST['login'] istnieje i nie jest null, weź go. W przeciwnym razie ustaw "Gość":
    $login = $_POST['login'] ?? "Gość";
?>