Switch stavek je podoben seriji IF stavkov na istem izrazu. V mnogih primerih, bi si želeli primerjati vrednost iste spremenljivke in izvajati različne dele kode glede na vrednost te spremenljivke. Ravno za to uporabljamo switch stavek.
Sledeča dva primera prikazujeta dva različna načina za doseg istega rezultata. Prvi z uporabo serije if stavkov in drugi z uporabo switch stavka:
if ($i == 0) { |
Pomembno je razumeti kako se switch stavek izvaja, da se izognete morebitnim napakam. switch izvede vrstico za vrstico (ubistvu, stavek za stavkom). Na začetku se ne izvede nobena koda. Koda se izvede šele, ko se najde case izraz z vrednostjo, ki je enaka vrednosti switch izraza. PHP nadaljuje izvajanje stavkov do konca switch bloka ali do prvega break stavka. Če ne podate break stavka na koncu stavkov case izraza, bo PHP nadaljeval izvajanje stavkov naslednjega case-a. Primer:
switch ($i) { |
V tem primeru, če je $i enak 0, bi PHP izvedel vse print stavke, in samo v primeru, da bi $i bil enak 2, bi dobili 'pričakovan' rezultat, ki bi izpisal samo 'i je enak 2'. Torej, pomembno je, da ne pozabite break stavkov (čeprav je spuščanje le-teh v določenih primerih zaželjeno).
V switch stavku, je vrednost izraza preverjena samo enkrat in njegov rezultat je primerjan z vsakim case izrazom. V elseif stavku je vrednost pogoja ponovno preverjena. Če je pogoj bolj zahteven kot enostavno primerjanje dveh vrednosti, bo switch stavek verjetno hitrejši.
Če case ne vsebuje stavkov, se enostavno nadaljuje izvajanje naslednjega case izraza.
switch ($i) { |
Poseben primer case izraza je default case. Ta izraz bo pobral vse vrednosti, ki niso veljale za ostale case izraze in bi moral biti podan zadnji. Primer:
switch ($i) { |
Case izraz je lahko izraz, ki vrne neko enostavno vrednost oziroma enostaven tip spremenljivlje, kot naprimer integer ali floating-point, številke ali nizi. Polja ali objekti so lahko uporabljeni samo kadar so spremenjeni v enostavne tipe spremenljivk.
Switch stavki podpirajo tudi alternativno sintakso. Za več informacij si poglejte Alternativna sintaksa za kontrolne strukture.