Învăţăm PHP: Structuri de control


Suntem încă la un nivel foarte primar cu PHP-ul. Am învăţat despre variabile, constante, operatori şi alte lucruri mici. Acum urmează să trecem prin structurile de control şi funcţii şi aş putea spune că etapa de grădiniţă la PHP s-a încheiat :) . Dacă ştiţi vreun limbaj de programare atunci ştiţi structurile de control: vă interesează doar sintaxa folosită de PHP. Dar pornesc de la premisa că nu stăpâniţi aceste cunoştinţe. Vom vorbi deci mai băbeşte despre structurile de control. Ce controlează ele? Execuţia, ordinea de execuţie. În mod logic, fără structuri de control ordinea de execuţie ar fi mereu de la prima până la ultima linie de cod, toate liniile. Dar uneori vrem ca o linie să se execute dacă e soare afară şi alta dacă e înnorat. Să zicem că avem o condiţie, care poate fi adevărată sau falsă şi în funcţie de ea dorim să afişăm un text sau altul.

[PHP]$conditie=true;
if($conditie)
echo „e adevarat deci!”;
else
echo „ah, e fals!”;[/PHP]

Foarte important de reţinut: dacă avem mai multe linii de cod de executat pe una dintre cele două ramuri ale structurii de control IF ne vom folosi de acolade pentru gruparea lor. Excepţie este când folosim o variantă a IF-ului pe care eu personal cam evit să o folosesc, dar e chestie de gusturi. Putem deci scrie un IF şi astfel:

[PHP]if($conditie):
echo „hip-hip”;
echo „-hurray”;
echo „!!!”;
else:
echo „huoooo!!!”;
endif;
[/PHP]

Interpretorului PHP îi va fi clar că liniile 2, 3 şi 4 se execută doar dacă $conditie este adevărat. Să revenim la formula mai tradiţională. Să vedem un cod mai cu sens. Verificăm dacă un număr este mai mare cu zero, respectiv dacă e par (pentru aceasta vedem restul împărţirii la 2 – dacă e 0 atunci e număr par; dacă e altceva atunci e număr impar.

[PHP]$numar=24;
if($numar>10)
echo „E un numar peste 10!
„;
if($numar%2==0)
echo „E numar par!
„;
else
echo „E numar impar!
„;[/PHP]

Uneori se întâmplă să avem înlănţuiri. Intentarea codului ne ajută să ştim cum şi unde ne aflăm în structuri.

[PHP]$n1=20;
$n2=15;
if($n1>$n2)
echo „Primul e mai mare!”;
else
if($n1<$n2) echo "Al doilea e mai mare!"; else echo "Na ca's egale!";[/PHP] PHP permite "compactarea" pentru ELSE IF în... ELSIF :) .

[PHP]$n1=20;
$n2=15;
if($n1>$n2)
echo „Primul e mai mare!”;
elseif($n1<$n2) echo "Al doilea e mai mare!"; else echo "Na ca's egale!";[/PHP] Acum vom vorbi de structuri repetitive. Atenţie: scrise prost ele pot degenera în bucle infinite, care ar putea să îngheţe serverul :) . Nimic definitiv, dar oricum evitaţi să îi faceţi aşa ceva serverului, fie el şi local. Pentru aceasta gândiţi-vă mereu: orice buclă trebuie să se termine. Primul tip de buclă este WHILE.

[PHP]$i=1;
while($i<=10){ echo $i.' '; $i=$i+1; }[/PHP] Am iniţializat o variabilă cu valoarea 1. Cât timp variabila a fost mai mică sau egal cu 10 am afişat-o şi am incrementat-o. Aşa cum v-aţi aştepta, codul de mai sus va afişa 1 2 3 4 5 6 7 8 9 10. Dacă aţi fost atenţi la lecţiile anterioare atunci ştiţi că bucla putea avea o singură instrucţiune în loc de două: echo $i++.' '; Structura alternativă se foloseşte din nou de două puncte după condiţie şi de adăugarea unui END+numele_structurii la sfârşit: [PHP]$i=1; while($i<=10): echo $i.' '; $i=$i+1; endwhile;[/PHP] Bucla WHILE are o soră geamănă numită DO WHILE. Există o diferenţă majoră: dacă WHILE poate să nu se execute niciodată (condiţia falsă din prima), la DO WHILE conţinutul buclei se execută obligatoriu cel puţin o dată: [PHP]$i=1; do{ echo $i.' '; $i+=1; }while($i<=10);[/PHP] Ei, dar mai simplu este cu structura FOR! E utilă când avem un număr determinat de execuţii. Această buclă nu mai foloseşte o singură expresie ci trei. Dacă IF, WHILE şi DO WHILE aveau o singură expresie pe post de condiţie, la FOR - care e ceva de genul for(expr1;expr2;expr3) - avem o primă expresie executată la început, ca iniţiere a buclei, o a doua pentru a şti dacă se execută conţinutul buclei, iar a treia se execută după eventuala executare a conţinutului buclei. Sună mai complicat decât este. Pentru a afişa numerele de la 1 la 10 vom scrie pur şi simplu: [PHP]for($i=1;$i<=10;$i++) echo $i.' ';[/PHP] Cât de simplu! Intuiţi ce face următorul cod? [PHP]echo "

„;
for($i=1;$i<=10;$i++) if($i%2==0) echo '

‘;
else
echo ‘

‘;
echo „

+++++
+++++

„;[/PHP]

Pentru WHILE, DO WHILE şi FOR avem nişte „modificatori” esenţial în curgerea execuţiei. Să începem cu CONTINUE. Acesta provoacă un salt peste tot codul care îi urmează direct la reluarea buclei (în cazul FOR-ului cu execuţia expresiei 3). De exemplu în codul de mai jos intenţionăm să afişăm toate numerele de la 1 la 10… dar, când restul împărţirii la 3 e zero (adică e număr divizibil cu 3) sărim peste afişare. Şi astfel vom avea, în loc de toate numerele, doar 1 2 4 5 7 8 10.

[PHP]for($i=1;$i<=10;$i++){ if($i%3==0) continue; echo $i.' '; }[/PHP] Mai dur e BREAK-ul. Acesta suspendă pur şi simplu bucla. Astfel mai jos putem avea şi o buclă până la 5 milioane, când $i a ajuns la 5 bucla este oprită. Se va trece la executarea codului de după structura repetitivă suspendată (se va afişa deci doar 1 2 3 4). [PHP]for($i=1;$i<=10;$i++){ if($i==5) break; echo $i.' '; }[/PHP] Acum să revenim puţin la IF. Există o formă compactată foarte-foarte uşoară. În loc să scriem IF şi să indicăm ramurile, facem totul dintr-o singură linie ca mai jos: [PHP]$numar=18; echo ($numar%2==0?"este par":"este impar");[/PHP] Forma teoretică este expresie?ramura_adevarat:ramura_fals. Vă amintiţi codul cu tabelul de mai sus? El devine mai scurt! Atenţie: mai scurt va însemna la început şi mai greu de înţeles. Nu vă grăbiţi să săriţi pe formele mai scurte până nu le stăpâniţi pe cele lungi.

[PHP]echo „

„;
for($i=1;$i<=10;$i++) echo '

‘;
echo „

+++++

„;[/PHP]

În fine, încheiem cu SWITCH. Acesta ne scuteşte de o serie de IF-uri. Să zicem că vrem să testăm o variabilă dacă are valoarea asta, sau asta, sau asta, sau asta… Cu IF-uri devine plictisitor. Cu SWITCH e foarte elegant şi uşor de urmărit codul. Exemplificăm:

[PHP]$ziua=3;
switch($ziua){
case „1”:
echo „E luni! Iarasi incepe saptamana.”;
break;
case „2”:
echo „Marti? Era mai bine in weekend.”;
break;
case „3”:
echo „Miercuri. Aproape jumatate de saptamana a trecut.”;
break;
case „4”:
echo „Joi. Deja ma gandesc ce fac in weekend.”;
break;
case „5”:
echo „Vineri. Am plecat!”;
break;
case „6”:
echo „Sambata. Ma relaxez.”;
break;
case „7”:
echo „Duminica. A se permanentiza.”;
break;
}[/PHP]

În funcţie de valoarea variabilei indicată în SWITCH, comparată cu fiecare CASE, se execută codul de după două puncte până la BREAK. Dacă nu puneţi BREAK se va continua cu verificarea următoarei variante de potrivire. Uneori poate fi util aşa ceva, dar cel mai adesea începătorii vor uita de BREAK şi se vor mira de efecte. Fiţi atenţi deci!

Să ştiţi că mai sunt structuri, dar am acoperit cele de bază. Cum vom evolua cu alte cunoştinţe vom reveni la celelalte structuri. De exemplu una ţine de şiruri (arrays), altele de organizarea codului pe fişiere… Dar toate la timpul lor.


Apreciază articolul:

1 stea2 stea3 stea4 stea5 stea (1 evaluări, media: 5,00 din 5)
Loading...Loading...

5 comentarii

  1. ValsiS spune:

    Imi place foarte mult cum explici, dar am o singura rugaminte. Atunci cand va fi cazul, cand din tot ceea ce ne-ai explicat tu se poate crea si cel mai mic script as vrea sa il dai ca exemplu.

    Sunt convins ca majoritatea persoanelor care vor sa invete, ar prinde mult mai repede daca ar avea exemple din „site-urile de zi cu zi”.

    Din ceea ce ne-ai invatat cel mai simplu script (pentru mine) ar fi unul care imi arata in ce data suntem azi, sau cat este ora.

    Cand ne vei invata sa facem si o baza de date si cum facem legatura intre PHP si baza de date (MySQL cred ca o sa fie folosit) cel mai simplu script ar fi cel care contorizeaza de cate ori ai accesat o pagina web (counter script).

    Sper ca m-am facut inteles…

  2. radu.capan spune:

    Am retinut. Evident ca vom ajunge in curand la chestiuni foarte concrete. Problema e ca am vrut sa pun niste baze (si mai vin cateva lucruri foarte de baza, inca fara prea mare atractivitate). Apoi incep aplicatiile.
    Am avut experienta invatarii poate la o duzina de limbaje de programare (nu web) si de fiecare data stiu ca eram nerabdator sa ajung la ceva palpabil. Ajungem in curand la asa ceva.

  3. Carmen spune:

    Este excelenta ideea de a-i invata pe vizitatorii siteului dvs PHP. Eu am sa fiu una din „ucenice” :) . Dar as avea o rugaminte: se poate sa creati pe site o categorie separata pentru PHP, de ex „invata php”. Astfel am accesa imediat „lectiile”.
    Multumesc. Cu pretuire pentru munca dvs.

  4. radu.capan spune:

    @Carmen: Multumesc. Intentionam asa ceva mai incolo, cand se mai strang, dar am facut acum. Daca priviti finalul articolelor cu tagul „invatam-php” a aparut un text special, care conduce la o pagina cum ati sugerat. Era oricum disponibil per tag http://www.cnet.ro/tag/invatam-php/ dar am facut si http://www.cnet.ro/php/

  5. Carmen spune:

    Multumesc. E superok. Am sa ma uit si la taguri, (de obicei ma uit la categoriile de la inceputul site-ului) ca sa gasesc mai usor informatiile de interes.
    O zi buna.


Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *