PHP tečaj: Pogojni stavki

Do sedaj so se naši programi izvajali "linearno", kar pomeni, da so se izvedle vse vrstice naše programske kode, druga za drugo, po vrsti.

V tem poglavju pa bomo spoznali, kako lahko glede na neke podatke oz. izjave izvajamo različno kodo. Z uvedbo pogojnih stavkov se bo nek blok kode, zapisane med dvema zavitima oklepajema { in }, izvedel samo v primeru, ko bo zadoščeno nekemu pogoju ali skupini pogojev.



Pogojni stavek if

Oglejmo si nekaj primerov "linearnega" in pogojnega izvajanja ukazov z if in else:

Zaporedno izvajanje ukazov:

a;     // ukazi a, b in c
b;     // se izvedejo enkrat in
c;     // po vrsti: najprej a, nato b, in na koncu še c

Pogojni stavek, kjer preverjamo resničnost enega pogoja:

a;
b;       // ukaza a in b se vedno izvedeta
if (pogoj) {
   c;    // ukaz c se izvede samo, če je pogoj resničen (true)
} else {
   d;    // ukaz d se izvede samo, če je pogoj neresničen (false)
}
V zgornjem primeru lahko celoten blok kode else tudi izpustimo, če ne želimo ob neresničnosti pogoja izvajati nobene kode.

Pogojni stavek, kjer preverjamo neresničnost (lažnost) enega pogoja:

if (!pogoj) {
   e;    /* ker je pred pogojem znak za negacijo (!),
            se ukaz e izvede samo, če je pogoj neresničen (false) */
} else {
   f;    // v tem primeru se ukaz f izvede, če je pogoj resničen
}

Pogojni stavek, kjer preverjamo resničnost dveh pogojev:

if (pogoj1 AND pogoj2) {
   g;    // ukaz g se izvede samo, če sta pogoja pogoj1 in pogoj2 hkrati resnična
} else {
   h;    /* ukaz h se izvede, če pogoja pogoj1 in pogoj2 nista hkrati resnična
            (torej je resničen samo eden od njiju ali pa celo nobeden) */
}

Omenimo še dve krajši obliki pogojnega stavka if, kjer ne uporabimo zavitih oklepajev { in } v primeru, kadar želimo izvesti samo en ukaz oziramo glede na pogoj vrniti dve različni vrednosti:

// dva primera, kjer ne uporabimo zavitih oklepajev,
// ker vsak blok kode vsebuje samo en ukaz
if ($pogoj) ukaz(); else drug_ukaz();
if ($pogoj) $spr = "vrednost"; else $spr = "druga vrednost";

// primer, kjer želimo glede na resničnost pogoja vrniti dve različni vrednosti 
$vrednost = (pogoj) ? "vrednost ob resničnosti" : "vrednost ob neresničnosti";



Pogojni stavek else if

Včasih želimo preveriti več možnosti stanja nekega pogoja. To lahko storimo z ukazom else if, ki ga dodamo v našo osnovno obliko pogojnega stavka if:

if (pogoj1) {
   // ukazi, ki se izvedejo, če je pogoj1 resničen
} else if (pogoj2) {
   /* ukazi, ki se izvedejo, če pogoj1 ni resničen,
      je pa resničen pogoj2 */
} else if (pogoj3) {
   /* ukazi, ki se izvedejo, če pogoj1 in pogoj2 nista resnična,
      je pa resničen pogoj3 */
} else {
   /* ukazi, ki se izvedejo, če pogoj1, pogoj2 in pogoj3
      niso resnični */
}



Pogoji

Poznamo več različnih vrst pogojev. Najbolj osnovni so primerjalni pogoji.

Primerjava številčnih vrednosti:

  • $a < 5 — število, ki je shranjeno v spremenljivki $a, je manjše od 5
  • $a > 5 — število $a je večje od 5
  • $b >= $c — število $b je večje ali enako kot število $c
  • $b <= $c — število $b je manjše ali enako kot število $c
  • $d == 1 — število $d je enako 1 (za primerjanje obvezno uporabimo dva enačaja!)
  • $d != 1 — število $d ni enako 1

Primerjava nizov, spremenljivk tipa boolean in objektov:

  • $ime == "Janez" — preverjamo, če je v spremenljivki $ime shranjen niz "Janez"
  • $ime != "Janez" — v spremenljivki $ime ni shranjen niz "Janez"
  • $dezuje == true ali $dezuje — spremenljivka $dezuje je tipa boolean in je resnična (true)
  • $dezuje == false ali !$dezuje — spremenljivka $dezuje ni resnična
  • $objekt1 === $objekt2 — oba objekta1 sta istega tipa z isto vrednostjo (uporabimo trojni enačaj)
  • $objekt1 !== $objekt2 — objekta nista istega tipa ali pa nimata iste vrednosti
Če želimo v pogoju uporabiti spremenljivko, za katero nismo prepričani, če smo jo definirali (oziroma je to odvisno od prejšnjega poteka programa), potem je najbolje uporabiti funkcijo isset(). V primeru, da v pogoju uporabimo nedefinirano spremenljivko, nam bo PHP interpreter namreč med izvajanjem programa javil opozorilo Notice.



Združevanje pogojev

Poljubno število pogojev lahko združimo z naslednjimi oznakami:

  • AND oz. && — vsi pogoji morajo biti hkrati resnični, da je resnična celota

    Primer: $a > 5 AND $a < 10 — število $a je med 5 in 10
    Primer: $a > 5 && $a < 10 — krajši zapis istih dveh pogojev
  • OR oz. || — vsaj en pogoj mora biti resničen, da je resnična celota

    Primer: $ime == "Janez" OR $ime == "Marko" OR $ime == "Anže" — niz v spremenljivki $ime je lahko "Janez", "Marko" ali "Anže"

    Primer: $ime == "Janez" || $ime == "Marko" || $ime == "Anže" — krajši zapis


Pogojni stavek switch

Ta stavek je v bistvu nadomestek strukture else if. Z njim primerjamo vrednost neke spremenljivke in v različnih primerih izvedemo različno kodo. Posplošen primer:

switch (spremenljivka) {
   case vrednost1:
      // koda, ki se izvrši, če je vrednost spremenljivke enaka vrednost1
      break;

   case vrednost2:
      // koda, ki se izvrši, če je vrednost spremenljivke enaka vrednost2
      break;

   // ...

   case vrednostN:
      // koda, ki se izvrši, če je vrednost spremenljivke enaka vrednostN
      break;

   default:
      /* koda, ki se izvrši, če vrednost spremenljivke ni
         enaka vrednost1, vrednost2, ... , vrednostN */
}

V glavi stavka switch navedemo spremenljivko, katere vrednost želimo primerjati z našim seznamom pričakovanih vrednosti. Znotraj samega stavka switch pa navedemo poljubno število elementov case, kjer navedemo možne (pričakovane) vrednosti spremenljivke.

Za dvopičji (:) pride koda, ki naj se izvrši v posameznem primeru. Za vsakim elementom case pride še ukaz break, s katerim izstopimo iz izvajanja kode v stavku switch.

Poseben ukaz je še default, ki igra enako vlogo kot else v stavku if — koda, ki je napisana znotraj bloka default, se izvrši le v primeru, ko so vsi prejšnji kriteriji odpovedali. Ta blok kode lahko sicer tudi izpustimo.


Super — zdaj ste se spoznali s pravim programiranjem!
V naslednjem poglavju (o zankah) pa si bomo ogledali številne praktične primere...



Naslednje poglavje
Zanke

Prejšnje poglavje
Polja spremenljivk (ang. arrays)