Documente noi - cercetari, esee, comentariu, compunere, document
Documente categorii

Structuri de control in PHP

Structuri de control in PHP

Dupa cum stiti, instructiunile PHP sunt separate prin caracterul ';'. Deseori, suntem nevoiti sa grupam mai multe instructiuni pentru a forma un bloc. Astfel, obtinem instructiunile compuse care sunt formate din mai multe instructiuni simple, separate prin caracterul ';'. In PHP, instructiunile compuse au urmatoarea sintaxa:

Instructiunile care formeaza instructiunea compusa pot fi de orice tip: orice structura de control, alte instructiuni compuse etc. Asadar un bloc de instructiuni (o instructiune compusa), in PHP, este delimitat de acolade.

Structura if
Una dintre cele mai importante structuri in orice limbaj este cea alternativa. In PHP sintaxa acestei structuri este urmatoarea:
if (conditie)
instructiune
Folosirea unei astfel de structuri indica faptul ca instructiunea se va executa daca si numai daca valoarea expresiei conditie (eventual dupa conversia la tipul boolean) este true.

Constructia if - else
In foarte multe cazuri dorim sa executam o alta instructiune daca valoarea expresiei conditie este false. In PHP putem utiliza o constructie de tipul if - else in acest scop. Sintaxa este:
if (conditie)
instructiune #1
else
instructiune #2


Constructia elseif
Uneori, suntem nevoiti sa folosim structuri alternative imbricate in diferite scopuri. Folosind constructii de tipul if - else vom obtine o secventa de tipul:
if (conditie #1)
instructiune #1
else
if (conditie #2)
instructiune #2
else

else
if (conditie #n)
instructiune #n
else
instructiune #n+1

Limbajul PHP permite folosirea unei prescurtari si anume constructia elseif. Practic, aceasta inlocuieste un else urmat de un if. Folosind aceasta structura, codul anterior poate fi scris astfel:
if (conditie #1)
instructiune #1
elseif (conditie #2)
instructiune #2
elseif

elseif (conditie #n)
instruciune #n
else
instructiune #n+1


Sintaxe alternative
Daca dorim sa se execute mai multe instructiuni cand este indeplinita o anumita conditie, atunci ar trebui sa folosim instructiunile compuse. De exemplu, pentru o structura if vom scrie:
if (conditie):
instructiune #1
instructiune #2

instructiune #n
endif

Practic, pentru orice structura de control PHP, putem inlocui acolada deschisa prin caracterul ' ' si acolada inchisa printr-un cuvant cheie optinut prin adaugarea prefixului end la cuvantul cheie care indica structura de control. Trebuie observat faptul ca else si elseif nu sunt structuri, ele fiind simple constructii folosite in cadrul structurii if. Din acest motiv, nu vom avea niciodata endelse sau endelseif, ci doar endif-uri. Asadar, sintaxa alternativa pentru o structura if in care se folosesc constructii else si elseif este urmatoarea:
if (conditie #1)
grup instructiuni #1
elseif (conditie #2)
grup instructiuni #2
elseif

elseif (conditie #n)
grup instructiuni #n
else
grup instructiuni #n+1
endif;


Structura while
Majoritatea script-urilor PHP vor contine cicluri. Pentru a folosi o bucla anterior conditionata vom utiliza structura while. Sintaxa acestei proceduri este:
while (conditie)
instructiune

Efectul acestei structuri este executarea instructiunii atat timp cat valoarea expresiei conditie (eventual dupa conversia la tipul boolean) este true. Trebuie observat faptul ca este posibil ca instructiunea sa nu fie executata niciodata. Si pentru aceasta structura avem la dispozitie o sintaxa alternativa si anume:
while (conditie):
grup instructiuni
endwhile;


Structura do - while
Uneori, dorim sa folosim bucle posterior conditionate. In acest scop, in PHP avem la dispozitie structura do - while a carei sintaxa este:
do
instructiune
while (conditie);

Singura diferenta fata de structura while este faptul ca valoarea conditiei este determinata, de fiecare data, dupa executarea instructiunii. Ca urmare, instructiunea va fi executata cel putin o data. Nu exista o sintaxa alternativa pentru aceasta structura.

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 (expresie #1; expresie #2; expresie #3)
instructiune

Prima expresie este evaluata o singura data, inainte de inceperea executiei ciclului. Instructiunea este executata cat timp cea de-a doua expresie are valoarea true. De fiecare data, dupa executarea instructiunii este evaluata cea de-a treia expresie. Oricare dintre cele trei expresii poate lipsi; in cazul in care o expresie lipseste, se considera ca ea are valoarea true. Pentru structura for poate fi folosita si urmatoarea sintaxa alternativa:
for (expresie #1; expresie #2; expresie #3):
instructiune
endfor;


Exemple
In continuare aveti un exmplu care afiseaza numerele cuprinse intre 1 si 15. Numerele pare vor fi scrise cu rosu, iar cele impare care sunt divizibile cu 3 cu verde, iar celelalte cu albastru. Vom folosi o structura repetitiva pentru a afisa numerele si o structura alternativa pentru a determina culoarea cu care vor fi afisate. Putem utiliza oricare dintre cele trei structuri repetitive; codul PHP pentru cele trei variante sunt prezentate in tabelul de mai jos.



Exemplu

Rezultat

<?php
// Structuri alternative si repetitive
// Bucla for
// Exemplu
for ($i = 1; $i <= 15; $i++):
echo '<b><font size = 3 ';
echo 'color = ';
if ( ! ($i % 2))
echo 'red';
elseif ( ! ($i % 3))
echo 'green';
else
echo 'blue';
echo '> $i </font></b>';
endfor;
?>

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

<?php
// Structuri alternative si repetitive
// Bucla while
// Exemplu
$i = 1;
while ($i<=15)
?>

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

<?php
// Structuri alternative si repetitive
// Bucla do - while
// Exemplu
$i = 1;
do while ($i <= 15);
?>

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Structura foreach
Aceasta structura poate fi folosita pentru a realiza o iteratie 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.

Exemplu

Rezultat

<?php
// structura foreach
echo '<TABLE width = 100%><TR><TD with = 50%>';
// un vector obisnuit
$a = array (1, 2, 3, 10);
echo '<b>Parcurgerea unui vector:</b><br><ol>';
foreach ($a as $v)
echo '<li><i>Valoarea curenta este </i>:<tt>$v</tt>n<br>';
/* parcurgerea vectorului, contorizarea elementelor si afisarea numarului de ordine al elementului curent */
$i = 0;
echo '</ol><b>O alta parcurgere: </b><ul>';
foreach ($a as $v)
/* un vector ale carui elemente sunt identificate prin chei */
$a = array (
'unu' => 1,
'doi' => 2,
'trei' => 3,
'zece' => 10
);
echo '</ul><td><width = 50%><b>Parcurgere cu afisarea cheilor: </b><ul>';
foreach ($a as $k => $v)
// o matrice
$b[0][0] = 'a';
$b[0][1] = 'b';
$b[1][0] = 'c';
$b[1][1] = 'd';
echo '</ul><b>Parcurgerea unei matrice:</b><br><tt>';
foreach ($b as $v1)
echo '</tt><br><b>Parcurgerea unui vector generat dinamic: </b><br><tt>&nbsp;&nbsp;';
// un vector generat dinamic
foreach (array (1, 2, 3, 4, 5) as $v)
echo '$vn';
echo '</tt></td></tr></table>';
?>



Parcurgerea unui vector:

  1. Valoarea curenta este :1
  2. Valoarea curenta este :2
  3. Valoarea curenta este :3
  4. Valoarea curenta este :10

O alta parcurgere:

  • $a[0] => 1
  • $a[1] => 2
  • $a[2] => 3
  • $a[3] => 10

Parcurgere cu afisarea cheilor:

  • $a[unu] => 1
  • $a[doi] => 2
  • $a[trei] => 3
  • $a[zece] => 10

Parcurgerea unei matrice:
  a b
  c d

Parcurgerea unui vector generat dinamic:
  1 2 3 4 5



Structura switch
In anumite cazuri trebuie sa efectuam anumite operatii in functie de anumite valori ale unei expresii. O solutie ar fi folosirea unor structuri if imbricate sau a uneia singure in care apar mai multe constructii eseif.
Sa presupunem ca o anumita variabila poate avea cinci valori distincte si pentru fiecare valoare trebuie executata o anumita instructiune. Daca folosim structura if, secventa de cod va fi urmatoarea:
if ($variabila == valoare #1)
instructiune #1
elseif ($variabila == valoare #2)
instructiune #2
elseif ($variabila == valoare #3)
instructiune #3
elseif ($variabila == valoare #4)
instructiune #4
else
instructiune #5

Folosind structura switch, secventa echivalenta este:
swich ($variabila)
Prezentam in continuare sintaxa generala a structurii switch:
switch (expresie)
Pentru inceput se determina valoarea expresiei si apoi se verifica daca aceasta apare ca valoare pentru una dintre constructiile case. In caz afirmativ, toate instructiunile incepand cu cea corespunzatoare valorii respective (pana la sfarsitul blocului swich) vor fi executate. Executia acestor instructiuni poate fi intrerupta daca este folosita instructiunea break, care va fi prezentata mai jos. Daca valoarea expresiei nu corespunde nici uneia dintre valorile corespunzatoare constructiilor case, se executa instructiunile corespunzatoare constructiei default. Daca aceasta lipseste, atunci nu se executa nici o instructiune. Trebuie precizat faptul ca valorile corespunzatoare constructiilor case pot fi numere intregi, numere reale sau siruri de caractere; nu pot fi utilizate obiecte sau vectori.

Instructiunea break
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)
Urmatorul exemplu ilustreaza efectul folosirii argumentelor pentru instructiunea continue.



Exemplu

Rezultat

<?php
$i = 0;
while ($i++ <5)
echo 'Acest mesaj nu va fi afisat niciodata.<br>n';
}
echo 'Nici acest mesaj nu va fi afisat niciodata.<br>n';
}
?>

Ciclul #1
  Ciclul #2
  Ciclul #3
Ciclul #1
  Ciclul #2
  Ciclul #3
Ciclul #1
  Ciclul #2
  Ciclul #3
Ciclul #1
  Ciclul #2
  Ciclul #3
Ciclul #1
  Ciclul #2
  Ciclul #3

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.