Manuál PHP | ||
---|---|---|
Předcházející | Kapitola 12. Řídicí struktury | Další |
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:
if ($i == 0) { print "i se rovná 0"; } if ($i == 1) { print "i se rovná 1"; } if ($i == 2) { print "i se rovná 2"; } switch ($i) { case 0: print "i se rovná 0"; break; case 1: print "i se rovná 1"; break; case 2: print "i se rovná 2"; break; } |
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:
switch ($i) { case 0: print "i se rovná 0"; case 1: print "i se rovná 1"; case 2: print "i se rovná 2"; } |
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.
switch ($i) { case 0: case 1: case 2: print "i je menší než 3, ale nezáporné"; break; case 3: print "i je 3"; } |
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:
switch ($i) { case 0: print "i se rovná 0"; break; case 1: print "i se rovná 1"; break; case 2: print "i se rovná 2"; break; default: print "i se nerovná 0, 1 ani 2"; } |
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 .
Předcházející | Domů | Další |
continue | Nahoru | declare |