Kontrolne strukture u PHP-u

Kontrolne strukture su jezički konstrukti koji služe da kontrolišemo izvršavanja programa. To su suštinski naredbe koje služe da u programu realizujemo različite tipove algoritama, tj. da stvorimo razgranate i ciklične strukture.

Grananja

Razgranate strukture služe da na osnovu nekog uslova odredimo koji deo programa će se izvršiti a koji ne. Ove strukture moramo koristiti u programu pošto skoro nikada ne možemo unapred sa sigurnošću znati sa kakvim vrednostima ćemo raditi. Drugim rečima, mora postojati način da u programu kažemo "ako se desi ovo, treba da uradimo ono".

Grananje if-else

Ovo je osnovni tip grananja, koji u nekom obliku postoji u skoro svakom "klasičnom" programskom jeziku. Najprostiji tip je ispitivanje nekog uslova i zadavanje segmenta programa koji će se izvršiti ako je uslov zadovoljen.

Uslov se zadaje obavezno u zagradi, u naredbi if. Posle uslova se zadaje blok naredbi u vitičastim zagradama. Očekuje se da uslov bude logička vrednost, ali može se zadati i string (prazan string je FALSE) i numerik (0 je FALSE).

if (uslov) { ...deo programa koji se izvršava ako je uslov TRUE }

Proširena verzija if grananja je if-else grananje koje ima i blok za "inače", tj. deo programa koji se izvršava ako uslov nije zadovoljen.

if (uslov) { ...deo programa koji se izvršava ako je uslov TRUE } else { ...deo programa koji se izvršava ako je uslov FALSE }

Višestruko grananje if-elseif-else

PHP poznaje i višestruko grananje koje koristimo ako je situacija takva da nije sve "crno i belo", već treba da definišemo više programskih blokova koji pokrivaju više mogućnosti. Ovo postižemo navodeći elseif (uslov) blokove (koliko god nam puta treba) posle prvog if bloka. Na kraju možemo navesti i običan else blok koji se izvršava u slučaju da ni jedan od zadatih uslova nije bio ispunjen.

if (uslov) { ...deo programa koji se izvršava ako je prvi uslov TRUE } elseif (uslov) { ...deo programa koji se izvršava ako je drugi uslov TRUE } ... else { ...deo programa koji se izvršava ako ni jedan uslov nije zadovoljen }

Višestruko grananje switch

Ovaj tip grananja koristimo ako smo u situaciji da je uslov za izvršavanje dela programa takav da upoređujemo izraz sa nekim konkretnim vrednostima. Ako možete, koristite switch umesto if-elseif-else grananja, pošto se brže izvršava.

Različite vrednosti se zadaju pomoću ključne reči case i to sa dvotačkom. Za isti segment naredbi je moguće navesti više case vrednosti.

switch (izraz) { case vrednost: ...deo programa koji se izvršava ako je izraz == vrednost break; case vred1: case vred2: ... ...deo programa koji se izvršava ako je izraz jednak vred1 ili vred2 ili... break; ... default: ...deo programa koji se izvršava ako vrednost izraza nije pronađena }

Ako vrednost izraza nije pronađena ni u jednom case-u, na kraju možemo koristiti ključnu reč default i postaviti deo programa koji će se izvršiti u takvoj situaciji.

Ciklusi

Rad sa podacimo obično moramo da "serijalizujemo", odnosno da radimo sa celim nizom podataka. U ovom slučaju potrebni su nam ciklične strukture, odnosno način da ponavljamo izvršavanje dela programa sve dok postoji potreba.

Svaki prolazak kroz naredbe ciklusa naziva se iteracija.

Ciklus while

Najosnovniji ciklus je logički ciklus koji se "vrti" sve dok je neki uslov zadovoljen. Posle komande while navodimo uslov (obavezno u zagradi) i zatim blok naredbi koji se ponavlja.

U ovom slučaju uslov se proverava na početku, što znači da ciklus može i da se uopšte ne izvrši.

while (uslov) { ...deo programa koji se ponavlja dok je uslov TRUE }

Ciklus do-while

Ovo je ista stvar kao malopre, s tim što se uslov proverava na kraju, što znači da će se ciklus izvršiti makar jednom.

do { ...deo programa koji se ponavlja dok je uslov TRUE } while (uslov);

Ciklus for

Ovo je specifična forma uslovnog while ciklusa, s tim što je zamišljeno da se koristi kao brojački ciklus. Unutar naredbe for zadaju se tri izraza:

for (početni_izraz; uslov; izraz_posle_iteracije) { ...deo programa koji se ponavlja dok je uslov TRUE }

Ciklus foreach

Ciklus foreach ima specifičnu primenu - za prolazak kroz asocijativne nizove. To je praktično jedini način da "dohvatimo" svaki element asocijativnog niza, pošto oni nisu "nabrojani", kao kod klasičnih numerisanih nizova, već pre predstavljaju strukturu parova ključ-vrednost.

U svakoj iteraciji ciklusa, zadata promenljiva dobija vrednost jednog elementa.

foreach ($niz as $vrednost) { ...deo programa koji radi sa elementom koji ima vrednost $vrednost }

Ako postoji potreba (a često postoji) da menjamo članove niza ili makar da "znamo" pod kojim ključem se nalazi određena vrednost, koristićemo sledeću formu:

foreach($niz as $indeks => $vrednost) { ...deo programa koji radi sa elementom $vrednost koji je $niz[$indeks] }

Nasilni prekid ciklusa

Više nego što volimo da priznamo, bićemo u situaciji da želimo da prekinemo izvršavanje ciklusa, pre njegovog "prirodnog" kraja. Nije "lepo" programiranje, ali je korisno.

break

Komanda break služi da se "iskoči" iz kontrolne strukture pre njenog kraja. Naravno, ova komanda se ne odnosi na if grananja - što je i logično jer obično moramo da pitamo da li je zadovoljen neki uslov da bismo iskočili iz ciklusa.

kada se ova komanda izvrši, ciklus se završava.

while (uslov) { ...naredbe if (uslov) { break; } ...naredbe } ...naredbe posle ciklusa na koje se prelazi ako se izvrši break

continue

Komanda continue je malo "mekša" varijanta iskakanja iz ciklusa. Ona služi samo da se ostatak naredbi unutar ciklusa ignoriše i da se odmah pređe na sledeću iteraciju.

while (uslov) { ...naredbe if (uslov) { continue; } ...naredbe koje se ignorišu u toj iteraciji ako se izvrši continue }

I break i continue naredbe imaju mogućnost da im se zada celi broj koji označava iz koliko ugnježdenih struktura želimo da "pobegnemo". Default vrednost je, očigledno 1.

Primer


<?php
  for ($i=0; $i<$N; $i++) {
    $M = $i*2;
    for ($j=1; $j<$M; $j+=2) {
      echo "Vrednosti su {$i} i {$j}";
      if ($i == $j)
        break 2;
    }
  }
  
  $dim["x"] = 140;
  $dim["y"] = 260;
  $dim["sirina"] = 300;
  $dim["visina"] = 400;
  
  foreach($dim as $ind => $vrednost) {
    switch ($ind) {
      case "x":
      case "y":
      case "z":
        echo "Koordinata {$ind} = {$vrednost}";
        break;
      case "sirina":
      case "visina":
        echo "Dimenzija {$ind} = {$vrednost}";
        break;
      default:
        echo "Nepoznata veličina {$ind} = {$vrednost}";
    }
  }
?>

Svi elementi sajta Web'n'Study, osim onih za koje je navedeno da su u javnom vlasništvu, vlasništvo su autora i ne smeju se koristiti, u celosti ili delimično bez pismenog odobrenja autora. To uključuje tekstove, slike, ilustracije, animacije, prateći grafički materijal i programski kod.
Ovaj sajt koristi tehnologiju kolačića (cookies). Detaljnije o tome možete pročitati u tekstu o našoj politici privatnosti.