PHP – Kontrolna struktura „Switch“

Instrukcija „Switch“ je sliฤna seriji „If“ naredbi koje se nalaze u istom izrazu. U mnogo situacija, trebaฤ‡ete da npr. uporeฤ‘ujete istu varijablu (ili ceo izraz) sa viลกe razliฤitih vrednosti, i pri tome da u zavisnosti od jednakosti ove dve vrednosti izvrลกite odreฤ‘eni (razliฤit) programski kod. Ova naredba je ekvivalentna naredbi „Select … Case“, Visual Basic-a. U naredna dva primera videฤ‡ete dva naฤina za reลกavanje istog problema, prvi naฤin koristi seriju „If“ instrukcija, a drugi naฤin naredbu „Switch“:


<?php
if ($a == 0) {
print "a je jednako 0";
}
if ($a == 1) {
print "a je jednako 1";
}
if ($a == 2) {
print "a je jednako 2";
}

switch ($a) {
case 0:
print "a je jednako 0";
break;
case 1:
print "a je jednako 1";
break;
case 2:
print "a je jednako 2";
break;
}
?>


Jako je bitno da razumete naฤin na koji se ova naredba izvrลกava, jer ฤ‡ete inaฤe naฤiniti greลกke. Naredba „Switch“ se izvrลกava liniju po liniju (zapravo, naredbu po naredbu). U prvom trenutku ne izvrลกava se ni jedna naredba. Tek kada PHP parser utvrdi koja PHP vrednost u Case izrazu odgovara vrednosti Switch izraza, tada poฤinje da se izvrลกava programski kod. PHP izvrลกava instrukcije do kraja „Switch“ bloka, ili do „Break“ naredbe. Pazite, ukoliko ne napiลกete naredbu „Break“ na kraju svakog „Case“ bloka, PHP ฤ‡e nastavljati da izvrลกava sve naredne „Case“ blokove. Pogledajte sledeฤ‡i primer:


<?php
switch ($a) {
case 0:
case 1:
case 2:
print "a je manje od 3, ali nije negativno";
break;
case 3:
print "a je 3";
}
?>

Ukoliko je varijabla $a jednaka nuli (0), PHP ฤ‡e izvrลกiti sve naredbe za ispis (Print)! Ako je vrednost varijable jedan (1), PHP ฤ‡e izvrลกiti obe, donje naredbe za ispis. Tek ako je vrednost varijable dva (2), imaฤ‡emo „oฤekivano“ ponaลกanje ove strukture i ispisaฤ‡e se samo „a je manje od 3, ali nije negativno„, jer iza ove naredbe sledi naredba prekida – „Break“. Ovo znaฤi da obavezno morate koristiti naredbu prekida.

Kod naredbe „Switch“ uslov se proverava samo jedanput, a rezultat se uporeฤ‘uje sa svakom „Case“ instancom. Naredba „Switch“ je bolje reลกenje od viลกestrukih „If … else if“ naredbi, jer se brลพe izvrลกava (zato ลกto se uslov viลกestruko proverava). Specijalan sluฤaj Case izraza predstavlja „podrazumevana“ Case naredba, ฤiji se programski kod izvrลกava ukoliko nije zadovoljena ni jedna prethodna Case instanca. Evo i primera:


<?php
switch ($a) {
case 0:
print "a je 0";
break;
case 1:
print "a je 1";
break;
case 2:
print "a je 2";
break;
default:
print "a nije ni 0, ni 1, ni 2";
}
?>

Pratite Krstaricu na www.krstarica.com