PHP&MYSQL

Acasă          |            E-mail        |       Cursuri-online.info      |     

Structuri conditionale

 

Luarea deciziilor prin structuri conditionale

Instructiunea IF

Pentru a lua o decizie, in scriptul nostru PHP, putem folosi instructiunea if. Acestei instructiuni trebuie sa ii oferim o conditie pe care sa o foloseasca, iar daca acea conditie este adevarata, va fi executat blocul de cod de dupa ea. Conditiile din instructiunea if trebuie sa fie trecute intre paranteze rotunde ( )
<?php
$a = 12;
$b = 8;
$rezultat = $a + $b;
if($rezultat == '20') {
echo 'Rezultatul este perfect';

}
?>
Puneti codul intr-un fisier structuri.php, salvati si apoi vizualizati in explorer accesand
http://localhost/structuri.php


Observati, conditia noastra, si anume aceea ca valoarea rezultata in urma adunarii dintre variabila a (12) si variabila b (8) sa fie egala cu numarul 20, este adevarata si in acest caz, codul de dupa { si respectiv } a fost executat.
Daca valoarea adunarii dintre variabila a si variabila b nu era 20, atunci afisarea in browser era nula.
<?php
$a = 155;
$b = 8;
$rezultat = $a + $b;
if($rezultat == '20') {
echo 'Rezultatul este perfect';
}

?>
In conditiile noastre, dupa cum vedeti, ne folosim de operatorii din PHP pe care i-am scris mai sus.

Instructiunea ELSE

De multe ori, pe langa decizia de a executa o actiune, atunci cand conditia este adevarata, doriti sa executati o alta care in caz contrar (in cazul in care conditia nu este adevarata) sa returneze o alta bucata de cod.
<?php
$a = 20;
$b = 8;
$rezultat = $a + $b;
if($rezultat == '20') {
echo 'Rezultatul este perfect';
} else {
echo 'Rezultatul nu este egal cu cel din conditie';
}

?>
Puneti codul intr-un fisier structuri.php, salvati, si apoi vizualizati in explorer accesand
http://localhost/structuri.php

Avem aceasta afisare deoarece variabila $a (20) adunata cu variabila $b (8) nu este egal cu 20, deci prin urmare se executa blocul de cod din instructiunea else.

Instructiunea ELSEIF

Aceasta instructiune este (dupa cum vedeti) o combinatie dintre instructiunea if si cea else.
Aceasta poate verifica fiecare conditie pana in momentul in care una dintre contidiile gasite returneaza o valoare adevarata.
<?php
$a = 20;
$b = 1;
$rezultat = $a + $b;
if($rezultat == '20') {
echo 'Rezultatul este egal cu 20';
} elseif ($rezultat == '21') {
echo 'Rezultatul este egal cu 21';
} else {
echo 'Rezultatul nu este egal cu cel din conditie';
}

?>

Schimbati pe rand valoarea variabilelor si testati in browser.
1) $a = 20;
$b = 0;
2) $a = 20;
$b = 1;
3) $a = 20;
$b = 20;
Pentru varianta 1, 20+0 = 20, se va executa bucata de cod din instructiunea if, daca modificati cu valorile din varianta 2, 20+1 = 21, se va executa bucata de cod din instructiunea elseif, iar daca puneti valorile din varianta
3, va rula instructiunea else. Toate acestea se interpreteaza si se gandesc cam asa:
Daca prima instructiune este adevarata, afisez ceva, daca nu, verific urmatoarea instructiune si, daca returneaza adevarat, afisez blocul de cod din ea, iar daca nici prima nici a-II-a nu returneaza adevarat, atunci afisez blocul de cod din instructiunea else.
In aceste instructiuni if, else sau elseif ne putem folosi de toti operatorii din PHP pe care i-am spus mai sus. In exemplul urmator o sa vedem cum calculele se pot complica si vom observa ca intr-o instructiune se pot
pune mai multe conditii.
<?php
$a = 20;
$b = 1;
$c = 5;
$d = 2;
$rezultat1 = $a + $b;
$rezultat2 = $c - $d;
if(($rezultat1 == '21') || ($rezultat2 != '100')) {
echo 'Rezultatul este ok';
} else {
echo 'Rezultatul nu este egal cu cel din conditie';
}

?>
Puneti codul intr-un fisier si vizualizati in browser. Veti observa ca rezultatul o sa fie cel din instructiunea if deoarece returneaza adevarat.
Analizand calculele, vom observa ca rezultat1 este egal cu 21, deoarece adunarea lui $a (20) cu $b (1) ne da 21, iar rezultat2 este egal cu 3, deoarece scaderea lui $c (5) cu $d (2) ne da 3. Instructiunea noastra if ne rezulta true, deoarece rezultat1 este egal cu 21, prin urmare true, si rezultat2 nu este egal cu 100, deci si aici ne da true.
Amintindu-ne de operatorii din PHP, stim ca || returneaza true (adevarat) daca prima conditie, a II-a conditie sau ambele sunt true (adevarate) si false (fals) in caz contrar.
Schimband instructiunea if in if(($rezultat1 == '21') || ($rezultat2 != '3')), vom observa ca tot bucata de cod din aceasta instructiune, se va executa, chiar daca prima parte este adevarata, iar a-II-a este falsa.
Daca schimbam iar instructiunea if in if(($rezultat1 == '200') || ($rezultat2 != '3')), vom observa ca se va executa urmatoara instructiune, si anume else, deoarece nici prima si nici a-II-a parte nu este valida.

Instructiunea SWITCH

Aceasta instructiune functioneaza asemanator cu cea if, insa permite conditiilor sa aibe mai mult de 2 valori.
Intr-o instructiune if, conditia poate fi adevarata sau falsa, insa intr-o instructiune switch conditia poate lua orice numar de valori diferite.
Aceasta instructiune trebuie sa contina o instructiune case care sa manevreze fiecare valoare pe care o doriti.
<?php
if(!isset($_GET['modul'])) $_GET['modul'] = '';
switch($_GET['modul']) {
case '':
echo 'Pagina switch.php';
break;
case 'pagina1':
echo 'Pagina switch.php?modul=pagina1';
break;
case 'pagina2':
echo 'Pagina switch.php?modul=pagina2';
break;
}

?>
Puneti codul intr-un fisier switch.php, salvati si apoi vizualizati in browser accesand http://localhost/switch.php

Accesand numai pagina switch.php, se va afisa bucla de cod din interiorul case ‘’:
Acum accesati in browser: http://localhost/switch.php?modul=pagina1 sau ?modul=pagina2

Observati modalitatea de accesare a paginii si rezultatul obtinut.

Bucla WHILE

Cel mai simplu tip de bucla PHP este while. Asemenea instructiunii if, ea se bazeaza pe o actiune. Diferenta dintre if si while este aceea ca instructiunea if, daca gaseste adevarata conditia, afiseaza o singura data bucata de cod din ea, insa in conditia while, daca rezultatul este adevarat, bucata de cod din ea se va repeta atata timp cat conditia este adevarata.
<?php
$numar = 1;
while($numar <= 5)
echo $numar.'<br>';
$numar++;
}

?>
Puneti codul intr-un fisier while.php, salvati si apoi vizualizati in explorer accesand http://localhost/while.php

 

Structura FOR

O alternativa cu o functionalitate mai ridicata pentru utilizarea buclelor este structura repetitiva for.
Sintaxa este foarte asemanatoare cu cea din limbajele C/C++ si Java si anume:
for(expresie1; conditie; expresie2) {
//instructiune
}
Prima expresie este evaluata o singura data, inainte de inceperea executiei ciclului.
Expresia conditie este testata inaintea fiecarei repetari a buclei. Daca expresia returneaza fals, repetarea se opreste.
Expresia 2 este executata la sfarsitul fiecarei repetari.
Instructiunea se executa la fiecare repetare a buclei.
Oricare dintre cele trei expresii poate lipsi; in cazul in care o expresie lipseste, se considera ca ea are valoarea true.
Bucla WHILE si FOR sunt identice din puct de vedere functional insa bucla FOR este putin mai complexa.
<?php
for ($variabila = 1; $variabila <= 10; $variabila++) {
echo $variabila.'<br>';
}

?>
Sa mai luam un exemplu de lucru cu bucla for.
Creati o pagina cu numele for.php, introduceti codul urmator apoi testati in browser.
<?php
echo "<table border=\"1\">\n<tr><td>Celula</td></tr>\n";
$culoare = "yellow";
for ($variabila = 1; $variabila <= 10; $variabila++) {
if($culoare == "yellow") $culoare = "red";
else $culoare = "yellow";
echo "<tr><td bgcolor=".$culoare.">".$variabila."</td></tr>\n";
}
echo "</table>";

?>

Vizualizati si sursa paginii si observati asezarea codului HTML.

Structura FOREACH

Aceasta structura poate fi folosita pentru a realiza o repetare printre toate elementele unui vector. Asadar, ea nu poate fi folosita decat impreuna cu vectorii; utilizarea sa asupra unei variabile de alt tip duce la aparitia de erori.
Exista doua sintaxe acceptate pentru aceasta structura si anume:
foreach(expresie_vectoriala as $valoare) {
//instructiune
}
foreach(expresie_vectoriala as $cheie => $valoare) {
//instructiune
}
Daca se utilizeaza prima varianta, atunci la fiecare iteratie valoarea elementului curent este atribuita variabilei $valoare, si apoi se trece la elementul urmator (a carui valoare va fi atribuita variabilei la urmatoarea iteratie).
Executia ciclului se incheie in momentul in care nu mai exista alte elemente in vector. Singura diferenta care apare in cazul utilizarii celei de-a doua variante este faptul ca la fiecare iteratie valoarea cheii elementului curent este atribuita variabilei $cheie.
In continuare este un exemplu de folosire a celor doua sintaxe ale structurii foreach.
<?php
$sir = array("unu", "doi", "trei", "patru", "cinci");
foreach($sir as $valoare) {
echo "Valoare: ".$valoare." <br>\n";
}

?>

 


Realizati o pagina cu numele foreach1.php, introduceti codul de mai sus si testati in browser.

Acum, sa realizam cel de-al II-lea exemplu; creati o pagina cu numele foreach2.php, introduceti codul de mai jos apoi testati in browser.

<?php
$sir = array("unu", "doi", "trei", "patru", "cinci");
foreach($sir as $cheie => $valoare) {
echo "Cheie: ".$cheie." Valoare: ".$valoare." <br>\n";
}

?>

Observati diferenta dintre primul exemplu de foreach si cel de-al II-lea.

Instructiunea BREACK

Aceasta instructiune poate fi folosita pentru a intrerupe fortat executia unui ciclu sau a secventei de instructiuni corespunzatoare unei structuri switch.
Instructiunea poate fi urmata de un argument care indica numarul de structuri imbricate a caror executie se incheie. Valoarea implicita este 1, deci se intrerupe executia unei singure structuri. Urmatoarea secventa de cod PHP realizeaza parcurgerea elementelor unui vector de numere intregi, pana in momentul in care se intalneste un numar negativ.
foreach ($a as $v)
if($v < 0)
break;
Mai departe, aveti cazul in care este intrerupta executia mai multor cicluri; vom considera ca parcurgem elementele unei matrice patratice cu n elemente si n coloane pana in momentul in care intalnim o valoare
nula.
for($i = 0; $i < $n; $i++)
for($j = 0; $j < $n; $j++)
if(!$a[$i][$j])
break 2;
Instructiunea break poate fi utilizata pentru intreruperea executiei secventelor de instructiuni corespunzatoare structurilor for, foreach, while, do - while si switch.

Instructiunea CONTINUE

Aceasta instructiune este folosita pentru a intrerupe executia secventei de instructiuni din interiorul unui ciclu si trecerea la urmatoarea iteratie.
In cazul instructiunii for, inainte de urmatoarea iteratie se evalueaza (executa) expresia de incrementare (expresia #3 din sintaxa generala). La fel ca si in cazul instructiunii break, poate aparea un argument care indica numarul structurilor imbricate asupra carora are efect.
Exemplul urmator realizeaza afisarea elementelor unui sir de numere intregi care sunt mai mari decat 1000.
foreach($a as $v) {
if($v <= 1000)
continue;
echo $v;
}
Urmatorul exemplu ilustreaza efectul folosirii argumentelor pentru instructiunea continue.
<?php
$i = 0;
while($i++ < 5) {
echo "Ciclul #1 <br>\n";
while(1) {
echo "&nbsp;&nbsp;Ciclul #2 <br>\n";
while (1) {
echo "&nbsp;&nbsp;Ciclul #3<br>\n";
continue 3;
}
echo "Acest mesaj nu va fi afisat niciodata.<br>\n";
}
echo "Nici acest mesaj nu va fi afisat niciodata.<br>\n";
}

?>
Realizati o pagina cu numele continue.php, introduceti codul de mai sus apoi testati in browser.

Alte structuri PHP

Exista mai multe alte structuri PHP care pot fi utilizate in anumite scopuri.
Vom aminti acum cateva dintre ele:
Structurile include, require, include_once si require_once pot fi utilizate pentru a "insera" anumite instructiuni care sunt pastrate intr-un alt fisier (document). Interpretorul PHP considera ca secventa din fisierul inserat se afla in fisierul din care s-a "comandat" inserarea in pozitia in care apare structura de inserare.
O alta structura este declare care permite crearea unor directive in executie.
Functiile PHP trebuie sa utilizeze instructiunea return pentru a furniza un rezultat.