Sunteți pe pagina 1din 13

Structurile de control

Structurile de control conditionale organizeaza blocurile de cod astfel incat sa


fie executate doar cand se indeplinesc anumite conditii si sunt: if/else si
switch.
Cealalta categorie, structurile de control repetitive, executa blocurile de cod
de un anumit numar de ori (dar tot cu ajutorul respectarii unor conditii), iar
din aceasta categorie fac parte: while, do-while, for, foreach . Aceste
repetari ale unui bloc de cod se numesc "iteratii", "cicluri", "bucle" sau in
engleza "loops", "iterations".
Cu ajutorul cuvintelor cheie break si continue programul indica iesirea
dintr-un ciclu, sau intreruperea ciclului si reluarea urmatorului ciclu. include
si require sunt doua constructii de limbaj ce permit includerea de cod php
din alte fisiere .php in interiorul scriptului curent.

if
Constructia if este una din cele mai importante si folosite structuri
decizionale, si nu doar in PHP. Forma ei cea mai simpla este:
if (expr)
instructiune;
Doar daca expr este evaluata boolean la TRUE se executa insructiune.

Daca avem mai multe instructiuni de executat in cazul in care expr este
TRUE, atunci formam un bloc de instructiuni adica incadram codul intre
acolade:
if (expr) {
instructiune1;
instructiune2;
}

Sursa script Sursa HTML in browser


1 <?php 1 $a este mai mare ca $b
2 $a = 99; 2 $str este definit si are o
3 $b = 1; valoare diferita de sirul
4 golvaloarea lui este text
5 if ($a > $b)
6 echo '$a este mai mare ca
7 $b';
8
9
echo "\n";
10
$str = 'text';
11
12 if ($str) {
13
14 echo '$str este definit si
15 are o valoare diferita de
16 sirul gol';
17 echo "valoarea lui este
$str";
}

?>

else, elseif
Daca vreau sa execut o instructiune (un bloc de instructiuni) cand expr este
adevarata si un alt bloc atunci cand este falsa, folosesc cuvantul cheie else.

Sursa script Sursa HTML in browser


1 <?php 1 a este mai mic sau egal cu b
2 $a = 1;
3 $b = 2;
4
5 if ($a > $b)
6 echo 'a este mai mare ca
7 b';
8 else
9 echo 'a este mai mic sau
10 egal cu b';
?>

Sursa script Sursa HTML in browser


1 <?php 1 acest bloc se executa daca
2 $a = 0; 2 expr adica $a este evaluat la
3 false.
4 int(0)
5 if ($a) {
6 echo 'expresia din if,
7 adica $a, este evaluata la
8 false. prin urmare acest bloc
9 nu se executa';
10 echo 'valoarea lui a
11 (convertita la string) este '
12 . $a;
} else {
echo 'acest bloc se executa
daca expr adica $a este
evaluat la false.' . "\n";
var_dump($a);
}
?>

Constructia elseif (sau else if) ofera mai multe posibilitati de executare in
cazul cand expr este fals. Blocul de cod de dupa else if se executa daca expr
este falsa, si daca toate constructiile else if de pana atunci au avut o
conditie falsa, si, in plus, conditia acestui else if este adevarata.

Sursa script Sursa HTML in browser


1 <?php 1 a este mai mare decat b
2 $a = 2; 2 optiunea este d
3 $b = 1;
4 if ($a < $b) {
5 echo 'a este mai mic decat
6 b';
7 } elseif ($a == $b) {
8 echo 'a este egal cu b';
9 } elseif ($a > $b) {
10 echo 'a este mai mare
11 decat b';
12 }
13
14 echo "\n";
15
16
$optiune = 'd';
17
18 if ($optiune == 'a') {
19 echo 'optiunea este a';
20 } elseif ($optiune == 'b') {
21 echo 'optiunea este b';
22 } elseif ($optiune == 'c') {
23 echo 'optiunea este c';
24 } elseif ($optiune == 'd') {
25 echo 'optiunea este d';
26
27 } else {
28 echo 'optiunea nu este nici
29 a, b, c sau d';
30 }

?>

switch
Constructia switch este conditionala, si permite executia unui bloc de cod in
functie de diferitele valori pe care le poate lua o variabila/expresie. Implicit,
operatorul de comparare intre expresie si diferitele valori posibile este "=="

Sursa script Sursa HTML in browser


1 <?php 1 a este 1
2 $a = 1;
3
4 switch ($a) { // $a este
5 expresia ce poate lua
6 diferite valori
7
8 case 0: // aici incepe
9 prima ramura "case"
10 echo 'a este 0';
11 break; // aici se termina
12 prima ramura "case"
13
case 1:
14
echo 'a este 1';
15
break;
16
17 case 2:
18 echo 'a este 2';
19 break;
20
21 case 3:
22 echo 'a este 3';
23 break;
24
25 default: // $a nu are nici
26 una din valorile de mai sus
27 echo 'a are alta valoare';
28
} /// end switch

?>
In general, dupa fiecare ramura "case" a switchului introducem
instructiunile dorite si apoi cuvantul cheie break. Introducerea lui break
limiteaza executia doar la acea portiune de cod (din acel case), altfel, ar
trece mai departe si ar executa "case"-urile de dedesubt, indiferent ca exista
egalitate cu acele valori sau nu. Alt cuvant cheie folosit este default folosit
in cazul in care expresia comparata nu are nici una din valorile din case.

Sursa script Sursa HTML in browser


1 <?php 1 $sir este abc $sir este b $sir
2 $sir = 'abc'; este c $sir are alta valoare
3
4 /* in acest exemplu, se
5 potriveste doar egalitatea cu
6 "abc"
7 dar pentru ca nu avem break
8 de aici in jos, se executa si
9 restul case-urilor
10 de cele mai multe ori punem
11 break la sfarsitul fiecarui
12 case.
13 dar uneori, vrem sa omitem
14 breakul, special pentru un
15 astfel de comportament
16 */
17
18 switch ($sir) { // $a este
19 expresia ce poate lua
20 diferite valori
21
case "a":
22
echo '$sir este a ';
23
24 case "abc":
25 echo '$sir este abc ';
26
27 case "b":
28 echo '$sir este b ';
29
30 case "c":
echo '$sir este c ';

default: // $a nu are nici


una din valorile de mai sus
echo '$sir are alta
valoare ';

} /// end switch

?>

Se pot combina mai multe ramuri case intr-una singura:

Sursa script Sursa HTML in browser


1 <?php 1
2 $hobby = 'inot';
3
4 switch ($hobby) {
5
6 case "inot":
7 case "volei":
8 case "plaja":
9
echo "Destinatie
10
potrivita: mare";
11
break;
12
13 case "catarat":
14 case "ski":
15 case "sanie":
16 echo "Destinatie
17 potrivita: munte";
18 break;
19
20 default:
21 echo "Alege o alta
22 destinatie";
23 break;
24
25
26 }
27
28
?>

while
In forma cea mai simpla, while arata asa:
Pseudocod
while (expr) instructiuni;

si are ca efect executarea instructiunilor atata timp cat expr este evaluata
boolean ca TRUE. In cadrul blocului de instructiuni, trebuie sa avem ceva ce
schimba valoarea lui expr din TRUE in FALSE altfel instructiunile se executa
la nesfarsit. Daca expr este de la inceput FALSE, blocul de instructiuni nu se
executa niciodata.

Sursa script Sursa HTML in browser


1 <?php 1 i este inca mai mic decat 10
2 $i = 1; 2 $i este 1
3 3
4 while ($i <= 10) { 4 i este inca mai mic decat 10
5 echo 'i este inca mai mic 5 $i este 2
6 decat 10'; echo "\n"; 6
7 echo '$i este '.$i; echo "\ 7 i este inca mai mic decat 10
8 n\n"; 8 $i este 3
9 $i++; 9
} i este inca mai mic decat 10
10
?> $i este 4
11
12 i este inca mai mic decat 10
13 $i este 5
14
15 i este inca mai mic decat 10
16 $i este 6
17
18 i este inca mai mic decat 10
19 $i este 7
20
21 i este inca mai mic decat 10
22 $i este 8
23
24 i este inca mai mic decat 10
25 $i este 9
26
i este inca mai mic decat 10
27
$i este 10
28
29

Sursa script Sursa HTML in browser


1 <?php 1 aceasta bucla se executa o
2 $i = 1; singura data
3
4 while ($i != 2) {
5 $i = 2;
6 echo 'aceasta bucla se
7 executa o singura data';
8 }
9
10
11 ?>

Sursa script Sursa HTML in browser


1 <?php 1
2 $a = 5; 2
3 3
4 /* 4
5 $a devine 0, si atunci 5
6 executarea lui while se
7 opreste
8 pentru ca 0 este evaluat ca
9 FALSE
10 */
11
12 while ($a) {
13 $a--;
echo 'valoarea lui $a este:
'.$a."\n";
}
?>

do-while
Constructia do-while este foarte asemanatoare constructiei while cu
singura diferenta ca instructiunile din bucla (loop) se executa cel putin o
singura data; pentru ca intai se executa codul apoi se verifica daca expresia
este evaluata la TRUE. Codul continua sa se execute atata timp cat expr
ramane TRUE.
Pseudocod
do { } while (expr)

Sursa script Sursa HTML in browser


1 <?php 1 $i nu va fi egal niciodata cu
2 $i = 4; 2 3 in acest script
3 do { totusi, acest cod se executa
4 echo '$i nu va fi egal macar o data
5 niciodata cu 3 in acest
6 script'."\n";
7 echo "totusi, acest cod se
executa macar o data";
} while ($i == 3);
?>

for
Structura de control for este o structura repetitiva. Arata astfel:
Pseudocod
for (expresie1;expresie2;expresie3) bloc instructiuni;

La fel ca si in celelalte cazuri, daca in cadrul buclei for vreau sa execut mai
multe instructiuni, le grupez intr-un bloc de instructiuni folosind acolade.

Structura for functioneaza astfel:

 expresie1 este evaluata o singura data, neconditionat, la inceputul


primei bucle
 expresie2 este o conditie, o expresie evaluata boolean la inceputul
fiecarei bucle
 expresie3 este evaluata/executata la sfarsitul fiecarei bucle

Se obisnuieste ca expresie1 sa fie o initializare a unei variabile gen $i = 1,


expresie2 o conditie gen $i <10, iar expresie3 o incrementare, sau
decrementare sau alta operatie aritmetica ce afecteaza variabila $i ($i++
sau $i+=3 , etc)

Sursa script Sursa HTML in browser


1 <?php 1 valoarea lui $i este: 0
2 /* 2 valoarea lui $i este: 1
3 clasic exemplu de for ce 3 valoarea lui $i este: 2
4 rezulta in 10 iteratii (de la 4 valoarea lui $i este: 3
5 0 la 9) 5 valoarea lui $i este: 4
6 */ 6 valoarea lui $i este: 5
7 7 valoarea lui $i este: 6
8 for ($i = 0; $i < 10; $i++) { 8 valoarea lui $i este: 7
9 echo 'valoarea lui $i este: 9 valoarea lui $i este: 8
10 '."$i \n"; 10 valoarea lui $i este: 9
11 } 11 int(10)
12
13 /*
14 ATENTIE: daca folosesti in
15 continuare variabila $i,
16 valoarea ei este 10 dupa for,
17 pentru ca la sfarsitul
18 ultimului
19 ciclu (cand $i a fost 9) s-a
executat $i++
*/

var_dump($i);

?>

expresie1, expresie2 sau expresie3 pot fi de fapt formate din mai multe
expresii separate prin virgula.

Sursa script Sursa HTML in browser


1 <?php 1 0 9
2 2 1 7
3 for ($i = 0, $j= 9; $i + $j > 3 2 5
4 0; $i++, $j-=2) { 4 3 3
5 echo $i.' '.$j."\n"; 5 4 1
6 } 6 5 -1
7 7 6 -3
?> 8 7 -5
9 8 -7

Oricare din expresie1, expresie2 sau expresie3 poate lipsi. Dar ramane
separatorul ";" dintre cele 3 expresii. Daca expresie2 lipseste, deci conditia
ce este evaluata la inceputul fiecarei bucle, atunci expresie2 este evaluata
automat la TRUE. Dintr-o astfel de bucla se poate iesi doar cu break.

Sursa script Sursa HTML in browser


1 <?php 1 0 1 2 3 4 5 6 7 8 9
2 for ($i = 0; ;$i++) { 2
3 3 1 2 3 4 5 6 7 8 9 10
4 if ($i > 9 ) {
5 break;
6 }
7 echo $i . ' ';
8 }
9
10 echo "\n\n";
11
12
for (; ;) { // echivalent cu
13
while(TRUE)
14
$k++;
15
if ($k > 10) {
16
break;
17
}
18
echo $k.' ';
19
}
20
21 ?>

foreach
Constructia foreach este destinata trecerii prin tablouri (array). Daca in alte
limbaje aceasta trecere (iteratie) prin elementele unui tablou se face folosind
constructia for, in PHP se prefera foreach din urmatorul motiv: cheile
tablourilor in PHP nu sunt neaparat numerice sau daca sunt numerice nu
sunt neaparat consecutive, deci e imposibil sa folosim for.
Lucrul cu tablouri, si implicit exemple ale constructiei foreach vor fi
detaliate in capitolul Arrays.

Sursa script Sursa HTML in browser


1 <?php 1 In aceasta iteratie avem:
2 $persoana = array( 2 cheia: prenume;valoare:
3 'prenume' => 3 Mihai;
4 'Mihai', 4
5 'nume' => 5 In aceasta iteratie avem:
6 'Ionescu', 6 cheia: nume;valoare: Ionescu;
7 'varsta' => 25, 7
8 'sex' => 'm', 8 In aceasta iteratie avem:
9 ); 9 cheia: varsta;valoare: 25;
10 10
In aceasta iteratie avem:
11 foreach ($persoana as $cheie 11
cheia: sex;valoare: m;
12 => $valoare) {
13 echo 'In aceasta iteratie
14 avem: '."\n";
15 echo 'cheia: ' . $cheie;
16 echo ';';
echo 'valoare: '. $valoare;
echo ";\n\n";
}
?>
break, continue
Cuvantul cheie break forteaza iesirea dintr-o bucla de tip for, foreach,
while, do-while sau switch. Aceasta constructie poate primi ca argument
un numar ce reprezinta numarul de constructii repetitive din care iese.

Sursa script Sursa HTML in browser


1 <?php 1 for terminat
2 $forloops = 0; 2 for terminat
3 3 while terminat
4 while (true) { 4 5 29
5
6
for ($i = 0; $i < 5; $i++)
7
{
8
$k = rand(1, 30); //
9
alege un numar intamplator de
10
la 1 la 30
11
if ($i == $k) {
12
echo '$i a ajuns egal
13
cu $k si anume egal cu '.
14
$i."\n";
15
break 2;
16
17 }
18 }
19
20 $forloops++;
21
22 if ($forloops > 2) {
23 break;
24 }
25 echo "for terminat \n";
26 }
27
echo "while terminat \n";

echo $i.' '.$k;


?>

Sursa script Sursa HTML in browser


1 <?php 1 i este: 1
2 2 i este: 2
3 $i = 0; 3 i este: 3
4 $j = 5; 4 i este: 4
5 // $j = 14; 5 i este j
6
7 /* in aceasta constructie, se
8 executa blocul de
9 instructiuni atata timp cat
10 $i < 100,
11 dar daca $i va fi egal cu $j,
12 iese brusc din while
13 */
14
15 while ($i < 10) {
16 $i++;
17
if ($i == $j) {
18
echo 'i este j';
19
break;
20
}
21
22 echo 'i este: ' .$i."\n";
}
?>

S-ar putea să vă placă și