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