PHP.ee
 php.ee   linuxator.com   whee 
06.09.10 / 20:15
  Artiklid
  » Algajaile
  » Andmebaasid
  » Varia
  » Graafika
  » Advanced
Logi sisse:
< nimi
< pass
Unustasid passi?
Kas eelistad võimalusel PHP koodi objektorienteeritult kirjutada?
 Jah, see teeb töö lihtsamaks
 Jah, see on lihtsalt lahe
 Nii ja naa, ei tunne erilist võitu
 Ei, mõttetu ajakulu
 Ei oska objektorienteeritult progeda
Tulemused
Liitu listiga!
Telli PHP uudiskiri
Nimi:
Email
Valikud - if või switch?
Martin Rebane

Kui sul on vaja valik teha paari-kolme võimaluse vahel, siis on kõige otstarbekam kasutada vast if-tingimuslauseid (kui sul pole aimugi, mis need on, peaksid alustama siit lehelt). Kui aga valikuid on rohkem, on otstarbekam otsida muud lahendust. Vaatame näidet:

if ($loom==kass)
    echo"see on kass";
if ($loom==koer)
    echo"see on koer";
if ($loom==tiiger)
    echo"see on tiiger";
if ($loom==kuldkala)
    echo"see ei ole loom, vaid kala";

Või nii..

if ($loom==kass)
    echo"see on kass";
elseif ($loom==koer)
    echo"see on koer";
elseif ($loom==tiiger)
    echo"see on tiiger";
elseif ($loom==kuldkala)
    echo"see ei ole loom, vaid kala";
else
    echo"UFO";

Selle saab ka teisiti kirjutada:

PHP kood:


 
switch($loom) {
    case 
kass:
        echo
"see on kass";
        break;
    case 
koer:
        echo
"see on koer";
        break;
    case 
tiiger:
        echo
"see on tiiger";
        break;
    case 
kuldkala:
        echo
"see ei ole loom, vaid kala";
        break;
    default:
        echo
"Tundmatu Lendav Objekt";
}



Raskemate võrdluste korral tarvitab switch ka vähem serveriressursse kui if.


Mida switchiga teha saab?

Üks kasutusi on jällegi faili lisamine includega. Näiteks on meil ühel lehel kaks linki:

index.php?lemmikloom=koer
ja

index.php?lemmikloom=kass


Nüüd saab antud paremeetreid suurepäraselt töödelda switchga, failis index.php on meil skript:

PHP kood:


 

switch($_GET['lemmikloom'])
{
    case 
koer:
        echo
'';
        break;

    case 
kass:
         echo
'';
        break;

    default:
         echo
'';

}


Seletame natuke. Misasi on break? Break lõpetab switchi ahela täitmise(tegelikult saab temaga lõpetada ka teisi tsükleid nt for, while..). Kui me seda ei paneks, leiaks switch küll õige koha, kuid ei lõpetaks tööd ja täidaks ka kõik endast allapoole jäävad tingimused hoolimata sellest, et need tõesed ei ole. Näiteks üleval näites, kui break'e ei oleks ja $_GET['lemmikloom']==koer, siis lisatakse ka kassipilt ja minuendapilt. Ühesõnaga - Switch lõpetab töö esimese break'i peale või lõppu jõudes.

Aga viimase case'i asemel on default? Jah, default täidetakse, kui ükski eelnevatest case'dest ei osutunud tõeks (või kui osutus, aga break oli puudu). Default ei ole kohustuslik.
Hea näide switch'i kasutamisest on näiteks [o3] lehekülg, kus võid jälgida, et ükskõik kuhu sa ka ei klikiks, ette jääb ikka üks ja seesama index.php - ainult '?id=' parameeter on teine.
Muidugi võib switchi ka teisteks puhkudeks tarvitada - näiteks soovid, et iga tund ööpäevas oleks sinu lehekülg erineva taustavärviga, siis kirjuta skript:

PHP kood:


 
switch(date("H"))
{
case 
10:
    echo
"<body style=\"backgroundblackcolor white;\">";
    break;
case 
1:
    echo
"<body style=\"backgroundgreencolorwhite;\">";
    break;
default:
    echo
"<body style=\"backgroundwhitecolorgreen;\">";
}


Siin on küll värvid ainult kahe tunni kohta, kuid ma usun, et kui rohkem tahad, saad selle kirjutamisega ise hakkama.

Illustreerimaks kuidas ja kuskohas switchi kasutada, lisasin ka pildi:


Värvivahetamise kood on siin: switchcolor.txt

Artikli kommentaarid

O