switch
Konstrukt switch je podobná sérii konstruktů IF,
testujících tentýž výraz. V mnoha případech můžete chtít porovnávat
stejnou proměnnou (nebo výraz) s mnoha různými hodnotami a provádět
různé kusy kódu v závislosti na tom, které hodnotě se rovná.
To je přesně to, k čemu je switch.
Následující dva příklady představují dva odlišné způsoby, jak napsat
totéž; jeden používá sérii podmínek if, zatímco
druhý je založen na konstruktu switch:
Je důležité pochopit, jak se konstrukt switch
provádí, aby se zabránilo chybám. Konstrukt switch
provádí řádek po řádku (resp. konstrukt po konstruktu). Na začátku
není proveden žádný kód. Pouze tehdy, když se najde case
s hodnotou odpovídající hodnotě výrazu u switch,
začne PHP provádět následující konstrukty. Vykonávání kódu pokračuje,
dokud se nedosáhne konce bloku switch nebo prvního
příkazu break. Pokud nenapíšete na konec bloku po
case příkaz break, bude PHP
pokračovat v provádění dalších konstruktů (po dalším
case). Například:
Zde, pokud se $i rovná 0, se budou provádět všechny příkazy "print"!
Pokud se $i rovná 1, PHP provede poslední dva příkazy, a pouze rovná-li se
$i číslu 2, obdržíte "očekávané" chování a zobrazí se pouze "i se rovná 2".
Takže je důležité nezapomenout na příkaz break (kromě
případu, kdy ho chcete vynechat záměrně k dosažení určitého cíle).
V konstruktu switch se podmínka testuje pouze jednou
a výsledek se porovnává s každou hodnotou v case.
V případě elseif se podmínka pokaždé testuje znovu.
Pokud je vaše podmínka komplikovanější než jednoduché porovnání a/nebo
je uvnitř cyklu, switch může být rychlejší.
Seznam konstruktů za case může být také prázdný, což
jednoduše předá řízení následujícímu case.
Speciální case je "default". Vyhovuje všem ostatním
hodnotám, které nejsou pokryty některým z ostatních
case a má být vždy jako poslední. Například:
Výraz v case může být libovolný výraz, jehož hodnota
je jednoduchého typu, tj. celé nebo reálné číslo nebo řetězec. Pole ani
objekty nelze použít, ledaže by odkazovaly na jednoduchý typ.
Alternativní syntaxe pro konstrukty switch je
podporována. Pro víc informací viz
Alternativní syntaxe
řídicích struktur .