switch
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.
Note: Néhány más nyelvvel ellentétben, a continue utasÃtás használható switch-ben és ugyanúgy működik mint a break. Ha van egy switch-et egy cikluson belül, és a ciklusban szeretnél továbblépni, a continue 2 parancsot kell kiadnod.
Az alábbi két példa két különbözÅ‘ módon Ãrja ki ugyanazt, az egyik egy sor if utasÃtásokat használ, a másik pedig a switch-et:
Example#1 A switch szerkezet
<?php
if ($i == 0) {
echo "i most 0";
} elseif ($i == 1) {
echo "i most 1";
} elseif ($i == 2) {
echo "i most 2";
}
switch ($i) {
case 0:
echo "i most 0";
break;
case 1:
echo "i most 1";
break;
case 2:
echo "i most 2";
break;
}
?>
Example#2 A switch szerkezetben használhatók stringek
<?php
switch ($i) {
case "alma":
echo "i most: alma";
break;
case "bigyo":
echo "i most: bigyo";
break;
case "torta":
echo "i most: torta";
break;
}
?>
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:
<?php
switch ($i) {
case 0:
echo "i most 0";
case 1:
echo "i most 1";
case 2:
echo "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 echo-t 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 kifejezések mindegyikével. 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.
<?php
switch ($i) {
case 0:
case 1:
case 2:
echo "i 3-nál kisebb, de nem negatÃv";
break;
case 3:
echo "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:
<?php
switch ($i) {
case 0:
echo "i most 0";
break;
case 1:
echo "i most 1";
break;
case 2:
echo "i most 2";
break;
default:
echo "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.
<?php
switch ($i):
case 0:
echo "i most 0";
break;
case 1:
echo "i most 1";
break;
case 2:
echo "i most 2";
break;
default:
echo "i se nem 0, se nem 1, se nem 2";
endswitch;
?>