Potřebujete porovnat hodnotu proměnné s několika možnými výsledky a na základě toho spustit určitý kód? V PHP máte k dispozici hned několik možností. Můžete použít sérii podmínek if-else
, nebo využít elegantnější konstrukci switch-case
.
V tomto tutoriálu se zaměříme na příkaz switch-case
a ukážeme si, jak ho efektivně využít pro porovnávání proměnné s různými hodnotami.
switch-case
vs. if-else
: Přímé srovnáníZačněme jednoduchým příkladem, který demonstruje rozdíl mezi použitím if-else
a switch-case
pro řízení toku programu.
Zkuste kód spustit několikrát a pozorujte výstup. Všimněte si:
case
je analogický bloku if
nebo elseif
.if-else
je shodný s výstupem sekce switch-case
.break
, který ukončí vykonávání kódu v daném bloku case
.Kdybyste break
v bloku case
zapomněli a proměnná $zvíře
by obsahovala hodnotu 'Lev', kód by vypsal umístění lvů, jelenů i koz a nakonec i výchozí zprávu o průvodci.
Příkaz default
slouží jako "záchytná síť" pro všechny ostatní hodnoty proměnné $zvíře
. Je to obdoba bloku else
v konstrukci if-else
. Pamatujte, že v kódu nemůžete použít více příkazů default
.
Co dělat, pokud se v jedné sekci zoo nachází více zvířat? V případě if-else
je můžeme zahrnout do jedné podmínky pomocí operátoru ||
(logický OR).
Výše uvedený kód správně informuje, že zebry jsou v západní části zoo. První blok if
přeskočí, protože se vykoná pouze tehdy, pokud je $zvíře
slon, lev nebo koza.
Jak přepsat tento kód pomocí switch-case
? Možná byste to zkusili takto:
Pozor! Tento kód tvrdí, že zebry jsou ve východní části zoo. Co se stalo?
Hodnota v příkazu switch
se porovnává s hodnotami v blocích case
pomocí volného porovnání. Výraz 'Slon' || 'Lev' || 'Koza'
se vyhodnotí jako true
. A protože volné porovnání s $zvíře
(které obsahuje neprázdný řetězec, tedy pravdivostní hodnotu) také vrací true
, vykoná se kód prvního bloku case
a my dostaneme nesprávné umístění zeber.
Správný způsob, jak v příkazu switch
ošetřit více hodnot, které mají vést ke stejnému kódu, je zapsat je na samostatné řádky:
Nyní získáme správnou polohu zeber a žádný návštěvník se v zoo neztratí.
Důležité je si uvědomit, že podmínka v příkazu switch
se vyhodnocuje pouze jednou. Naproti tomu v konstrukci if-else
se vyhodnocuje opakovaně, pro každý blok if
zvlášť.
V tomto příkladu voláme funkci nejlidnatější_město()
, která vrací název města. V tomto případě vrací 'New York', ale mohla by být mnohem složitější a získávat data z webové služby. Použití if-else
by v tomto případě vedlo k vícenásobnému volání funkce nejlidnatější_město()
.
Samozřejmě bychom se tomu mohli vyhnout uložením výsledku volání do proměnné, ale switch
nám umožňuje vyhnout se proměnným úplně.
Související návody
Jak používat PDO v PHP: Komplexní průvodce
Jak používat cykly v PHP
Jak psát testy v PHP: Komplexní průvodce
Komentáře