if (condition) { ... } wykonuje swój blok tylko wtedy, gdy warunek jest prawdziwy. Dodaj elseif (other condition) { ... } dla kolejnych przypadków i else { ... } dla wszystkiego, co zostało. PHP sprawdza warunki od góry i wykonuje tylko pierwszy pasujący blok.
Zmień $temperature i uruchom ponownie. Ponieważ sprawdzanie idzie od góry do dołu, 24 zatrzymuje się na drugim warunku i nigdy nie dociera do >= 10, choć on też jest prawdziwy. Układaj warunki od najbardziej szczegółowego do najbardziej ogólnego.
elseif vs else if
Z nawiasami klamrowymi elseif i else if robią to samo. else if to technicznie else, którego ciałem jest nowe if, ale wynik jest identyczny.
Różnica pojawia się tylko w składni z dwukropkiem, używanej w szablonach (kolejne sekcje). Tam else if psuje kod:
<?php $score = 72; ?>
<?php if ($score >= 90): ?>
<p>A</p>
<?php else if ($score >= 60): ?>
<p>Passed</p>
<?php endif; ?>
PHP Parse error: syntax error, unexpected token "if", expecting ":" in /home/index.php on line 4
Pisz elseif jako jedno słowo, a nigdy nie spotkasz tego błędu.
Wiele warunków z && i ||
&& (i) wymaga, aby obie strony były prawdziwe, || (lub) wymaga co najmniej jednej, a ! odwraca warunek. PHP przestaje obliczać, gdy tylko odpowiedź jest znana, więc w $user !== null && $user['active'] druga część wykonuje się tylko wtedy, gdy użytkownik istnieje.
Gdy mieszasz && i ||, dodaj nawiasy: && wiąże silniej, a nawiasy sprawiają, że intencja jest oczywista dla następnego czytelnika. PHP ma też słowa kluczowe and i or, ale mają niższy priorytet niż =, więc $ok = true and false; ustawia $ok na true. Trzymaj się && i ||.
Co liczy się jako prawda w if
Warunek nie musi być wartością logiczną. PHP go konwertuje, a fałszem jest kilka wartości: false, 0, 0.0, "", "0", [] i null. Wszystko inne jest prawdą, także "false", " " i "0.0".
| $x | bool | empty |
|---|---|---|
| false | ||
| 0 | ||
| 0.0 | ||
| "" | ||
| "0" | ||
| null | ||
| [] | ||
| " " | ||
| "0.0" | ||
| "a" | ||
| [0] | ||
| 1 |
Dlatego if ($items) to popularny sposób powiedzenia „tablica nie jest pusta”. Kłopoty sprawia wiersz "0": pole formularza, w którym ktoś wpisał 0, to niepusty łańcuch, a mimo to if ($_POST['qty']) traktuje je jako fałsz. Porównuj jawnie (if ($qty !== '')), gdy zero jest poprawną odpowiedzią. Te same zasady decydują o tym, co zwraca empty().
if else w HTML z if: i endif;
Między znacznikami HTML łatwo zgubić nawiasy klamrowe. PHP ma składnię alternatywną: dwukropek po warunku, elseif ...: i else: dla pozostałych gałęzi oraz endif; na końcu. Uruchom ten blok, potem kliknij wyniki na karcie Page: każdy link wykonuje ten sam skrypt ponownie z nowym $_GET['score'].
<?= $score ?> to skrót od <?php echo $score; ?>. Ten sam styl z dwukropkiem istnieje dla pętli (foreach: endforeach;, while: endwhile;) i to go używa większość szablonów PHP.
if w jednej linii i operator trójargumentowy
Pojedyncza instrukcja może stać po warunku bez nawiasów klamrowych. To działa, ale następna dopisana linia nie znajdzie się w if, dlatego wiele przewodników stylu zawsze wymaga nawiasów. Aby wybrać jedną z dwóch wartości, operator trójargumentowy jest krótszy niż pełne if/else.
Gdy jedną zmienną porównujesz z wieloma dokładnymi wartościami, wyrażenie match czyta się lepiej niż długi łańcuch elseif.
Wczesny return zamiast zagnieżdżania
Głęboko zagnieżdżone bloki if trudno śledzić. W funkcji najpierw sprawdź przypadki błędne i od razu wykonaj return. Główna logika stoi wtedy przy lewej krawędzi.
Częsty błąd: = zamiast == w warunku
Pojedyncze = przypisuje. if ($role = 'admin') zapisuje 'admin' w $role, a potem testuje ten łańcuch, który jest prawdą. Blok wykonuje się dla każdego użytkownika, a $role jest teraz w dodatku błędne.
Do porównań używaj ===, chyba że masz powód, by chcieć żonglowania typami. Niektórzy piszą stałą najpierw (if ('admin' === $role)), żeby brakujące = stało się błędem, a nie cichym przypisaniem.
Najczęściej zadawane pytania
Czym różni się elseif od else if w PHP?
Z nawiasami klamrowymi działają tak samo: else if to else, którego ciałem jest kolejne if. W składni z dwukropkiem (if (...): ... endif;) działa tylko elseif, a else if to błąd parsowania. Używanie elseif wszędzie omija tę różnicę.
Jak sprawdzić kilka warunków w instrukcji if w PHP?
Połącz je przez && (wszystkie muszą być prawdziwe) albo || (co najmniej jeden): if ($age >= 18 && $hasTicket) { ... }. Gdy mieszasz oba, użyj nawiasów, na przykład if ($isAdmin || ($isOwner && $isActive)).
Jak zapisać instrukcję if w jednej linii w PHP?
Pojedyncza instrukcja może stać po warunku bez nawiasów klamrowych: if ($debug) echo 'debug mode';. Aby wybrać jedną z dwóch wartości w jednej linii, użyj operatora trójargumentowego: $label = $count === 1 ? 'item' : 'items';.
Jak używać if else w HTML w PHP?
Użyj składni alternatywnej, która dobrze czyta się między znacznikami HTML: <?php if ($loggedIn): ?> <p>Welcome back</p> <?php else: ?> <a href="/login">Log in</a> <?php endif; ?>.