PHP kézikönyv
Előző
12.
Fejezet.
Vezérlési szerkezetek
Következő
A switch kifejezés hasonló egy sereg IF kifejezéshez, ahol a kifejezésekben ugyanaz szerepel. [Pont olyan, mint a C-ben, C-s gyakorlattal rendelkezőknek Tovább gomb].
Gyakori, hogy ugyanazt a változót (vagy kifejezést) kell összehasonlítani több különböző értékkel, és más-más kódot végrehajtani a változó (kifejezés) értékétől függően.
Pontosan erre való a switch.
Az alábbi két példa két különböző módon írja ki ugyanazt, az egyik egy sor if kifejezést használ, a másik pedig a switch -et:
if ($i == 0) {print "i most 0";} if ($i == 1) {print "i most 1";} if ($i == 2) {print "i most 2";} switch ($i) {case 0: print "i most 0"; break; case 1: print "i most 1"; break; case 2: print "i most 2"; break;}
A hibák elkerülése végett fontos megérteni, hogy hogyan kerül végrehajtásra a switch A hibák elkerülése végett fontos megérteni, hogy hogyan kerül végrehajtásra a switch szerkezet.
A switch vagyis utasításról utasításra hajtódik végre.
Nem hajtódik végre semmilyen utasítás, csak akkor, ha egy olyan case kifejezést talál a PHP, amely egyezik a switch kifejezés értékével.
Ezután a PHP addig folytatja az utasítások végrehajtását, amíg el nem éri a switch blokk végét, vagy nem találkozik egy break utasítással.
FONTOS!
Ha nem nincs break egy case -hez tartozó utasítás( sorozat) végén, akkor a PHP végrehajtja a soron következő case -hez tartozó utasításokat is!
Például:
switch ($i) {case 0: print "i most 0"; case 1: print "i most 1"; case 2: print "i most 2";}
Itt, ha $i értéke 0, akkor a PHP az összes kiíró utasítást végrehajtja!
Ha $i értéke 1, akkor a PHP az utolsó két print-et hajtja végre, és csak ha $i értéke 2, akkor kapod a 'kívánt' eredményt (csak az 'i most 2 'íródik ki).
Tehát nagyon fontos nem elfelejteni a break utasítást (bár bizonyos körülmények között lehet, hogy pont ennek elhagyása a szándékos).
A switch kifejezésben a feltétel csak egyszer értékelődik ki és a kapott eredmény lesz összehasonlítva a case A switch kifejezésben a feltétel csak egyszer értékelődik ki és a kapott eredmény lesz összehasonlítva a case kifejezések mindegyikével.
Ha elseif Ha elseif kifejezéseket használsz, a kifejezések újra és újra kiértékelődnek. [és újra és újra be kell gépelni.
Ez nem csak fárasztó, de hiba forrása is lehet.] Ha a kifejezés bonyolult, vagy egy ciklus belsejében van, a switch a gyorsabb.
Egy eset (case) utasításlistája üres is lehet, így a vezérlés a következő case-címkére adódik.
switch ($i) {case 0: case 1: case 2: print "i 3-nál kisebb, de nem negatív"; break; case 3: print "i pont 3";}
Egy különleges eset a default [alapértelmezett] címke.
Ez a címke bármivel egyezik, amivel a korábbi case elemek nem egyeztek.
Ennek kell az utolsó elemnek lennie.
Például:
switch ($i) {case 0: print "i most 0"; break; case 1: print "i most 1"; break; case 2: print "i most 2"; break; default: print "i se nem 0, se nem 1, se nem 2";}
A case kifejezés tetszőleges kifejezés, aminek egyszerű a típusa, vagyis egész vagy lebegőpontos szám, vagy string.
Tömbök és objektumok itt nem használhatók, csakis egy-egy elemük ill. változójuk egyszerű típusként.
Az alternatív szintaxis működik a switch-ekkel is.
Bővebb információért lásd:
Vezérlési szerkezetek alternatív szintaxisa.
switch ($i): case 0: print "i most 0"; break; case 1: print "i most 1"; break; case 2: print "i most 2"; break; default: print "i se nem 0, se nem 1, se nem 2"; endswitch;
Előző
Tartalom
Következő
Fel