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
elseiforaz rozdzielnieelse 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ą (!truedajefalse).
<?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
andorazor, 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ę
0oraz0.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
breakna końcu każdego przypadkucase! Jeśli o nim zapomnisz, PHP wykona kod dla danego przypadku ORAZ dla wszystkich kolejnych poniżej (tzw. zjawisko fall-through). Klauzuladefaultjest opcjonalna, ale działa jak końcoweelse— odpala się, gdy żadencasenie 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:
- Operator trójargumentowy (Ternary Operator):
<?php
$wiek = 20;
$status = ($wiek >= 18) ? "Pełnoletni" : "Niepełnoletni";
echo $status;
?>- Operator łączenia wartości null (
??): Zabezpiecza przed błędemUndefined 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ść";
?>