Tegyük fel, hogy van egy változónk, mely különböző úti célokat tartalmaz, és eme változó alapján szeretnénk más-más tanácsokat adni az utazóknak. Példánkban több úti célról van szó, így egy borzalmasan hosszú és bonyolult if/else if/else if/else blokkra lenne szükségünk. Nem hangzik túl jól, nem igaz? Nézzünk hát egy másik megoldást!
A switch állítás segítségével egyszerre ellenőrizhetjük az összes feltételt, a programozás pedig sokkal hatékonyabb lesz.
A switch állítás úgy működik, hogy megragad egy változót, melyet bemenetként (input) kezel, majd a változót a switch állításhoz beállított esetekhez (case) hasonlítja. Ahelyett, hogy minden elemet külön tesztelnénk, mint az if állítások esetében, a switch egyszerre valósítja ezt meg. Lássuk a szintaxist:
Switch (n) {
case 1címke:
// Kód, ami lefut, ha n=1címke
break;
case 2címke:
// Kód, ami lefut, ha n=2címke
break;
...
default:
// Kód, ami lefut, ha az n nem egyezik meg egyik esettel sem
}
Példa a PHP switch állítására
Ha visszatérünk a cikk elején említett utazós példához, akkor a $destination változó mellé a következő eseteket rendelhetjük: Las Vegas, Amszterdam, Egyiptom, Tokió és Hawaii. Lássuk, hogyan festene a kódunk, ha mindegyik úti cél mellé más-más tanáccsal szeretnénk kedveskedni a weboldalunkra látogató turistáknak!
PHP-kód:
$destination = 'Tokió';
echo 'Ide utazol: ' . $destination . '<br />';
switch ($destination) {
case 'Las Vegas':
echo 'Hozz magaddal 500 extra dollárt!';
break;
case 'Amszterdam':
echo 'Légy nyitott!';
break;
case 'Egyiptom':
echo 'Hozz magaddal elegendő naptejet!';
break;
case 'Tokió':
echo 'Szükséged lesz zsebpénzre!';
break;
}
Megjelenítés a böngészőben:
Ide utazol: Tokió
Szükséged lesz zsebpénzre!
Mivel a $destination változó értéke Tokió, a PHP a switch végrehajtása során azonnal rákeresett arra az esetre, amely a “Tokió” értéket tartalmazza. És mivel talált ilyet, azt a kódot írta ki, amelyet ez a szegmens tartalmaz.
Megfigyelhetted, hogy minden eset (case) tartalmaz egy break elemet a kódrészlet végén. Ez a break elem arra való, hogy megakadályozza, hogy más esetek is lefussanak. Tegyük fel, hogy a kód nem tartalmazza a break állításokat. Mi történne? Nos, a PHP lefuttatna minden olyan esetet is, amely a “Tokió” után található — ezt pedig nem szeretnénk! A break hasznos eleme a switch állításoknak, tehát fontos megjegyezni, mire való, és mi a feladata. A kezdő programozóknak azt ajánljuk, hogy mindenképp használják a break elemet, hogy elkerüljék a felesleges problémákat!
A switch állítás szerkezete elég egyedi és különleges, úgyhogy mindenképp érdemes barátkoznunk vele még egy kicsit, mielőtt továbblépnénk. Lássunk hát még egy példát:
PHP-kód:
<?php
$today = date('N');
switch ($today) {
case 1:
echo 'Ma hétfő van. Takaríts ki!';
break;
case 2:
echo 'Ma kedd van. Vásárolj be!';
break;
case 3:
echo 'Ma szerda van. Menj el fodrászhoz!';
break;
case 4:
echo 'Ma csütörtök van. Mosd le a kocsit!';
break;
case 5:
echo 'Ma péntek van. Menj el bulizni!';
break;
case 6:
case 7:
echo 'Hétvége van. Pihenj!';
break;
}
?>
A fenti kódrészlet minden hétköznap más üzenettel várja a látogatót, viszont szombat és vasárnap ugyanaz az üzenet jelenik meg, mert a 6. nap esete nem tartalmaz kódrészletet vagy break állítást, ezért a következő eset kódrészlete is lefut. Így tudjuk több esetben is lefuttatni ugyanazt a kódrészletet.
Az alapeset — deafult case
Ha már megbarátkoztál az if állítások különféle típusaival, észrevehetted, hogy a fenti kódokban nincs hova beírni, mi a teendő, ha a változó nem felel meg a feltételeknek. Az if esetében ezt az else segítségével tehettük meg, a switchnél pedig a deafult eset alkalmas erre.
Általában ajánlatos a deafult, vagyis az alapesetet is beszúrni a switch állításba. Bemutatunk egy példát, melyben egyik eset sem felel meg a változónknak. Ilyenkor a deafult case lesz lefuttatva. Fontos: a kódban a case szó nem szerepel a deafult szó előtt, mert a deafult egy speciális kulcsszó!
PHP-kód:
$destination = 'New York';
echo 'Ide utazol: ' . $destination . '<br />';
switch ($destination) {
case 'Las Vegas':
echo 'Hozz magaddal 500 extra dollárt!';
break;
case 'Amszterdam':
echo 'Légy nyitott!';
break;
case 'Egyiptom':
echo 'Hozz magaddal elegendő naptejet!';
break;
deafult:
echo 'Csomagolj elegendő fehérneműt!';
break;
}
Összegzés:
Elsőre talán bonyolultnak tűnt, de reméljük, a switch sem okozott különösebb fejfájást. Gyakorold az if variációkat és a switch állítást szorgalmasan, hiszen programozói karriered során nagy szükséged lesz rájuk. Következő leckénkben a PHP egy másik területére kalandozunk el, tarts velünk!