Curs PHP-MySQL

Scrierea instructiunilor PHP conditionale (II)

  • învatati sa întelegeti si sa scrieti instructiunea switch si instructiunile conexe acesteia
  • învatati sa întelegeti si sa scrieti instructiunile while, do while si for

1. Scrierea instructiunilor switch, break si default

In cazul in care vrem sa comparam valoarea unei singure variabile cu o succesiune de valori, in locul instructiunii "if" putem folosi instructiunea switch:
De exemplu, sa presupunem ca valoarea variabilei $numar este l, 2 sau 3, reprezentând respectiv dimensiunile "mica", "medie" si "mare". Iata un mic script care afiseaza dimensiunile asociate valorilor variabilei $numar, folosind functia switch alaturi de break si default care vor fi explicate mai jos:

<?php
switch($numar) {
      case(1):
          echo "mic";
          break;
      case(2):
          echo "mediu";
          break;
      case(3):
          echo "mare";
          break;
      default:
          echo "Acesta nu este un cod valabil";
}
?>
- Actiunea unei instructiuni switch este determinata de valoarea unei expresii întregi, nu de valoarea unei expresii conditionale. Numele variabilei este dat între parantezele care urmeaza dupa cuvântul cheie switch. Acoladele delimiteaza o serie de instructiuni case si o instructiune default optionala, fiecare dintre instructiunile cuprinse între acolade putând avea instructiuni asociate.
Când este executata, instructiunea switch încearca sa stabileasca o identitate între valoarea variabilei sale si valoarea asociata unei instructiuni case. Se vor executa instructiunile asociate primei instructiuni "case" pentru care identitatea respectiva este valabila.
Daca valoarea variabilei din instructiunea switch nu corespunde nici uneia din valorile asociate instructiunilor case, se vor executa instructiunile asociate instructiunii default, daca exista o asemenea instructiune (ne este obligatorie).
Un procedeu de programare indicat consta în aceea ca fiecare instructiune case din cadrul unei instructiuni switch sa se încheie cu o instructiune break.
; Instructiunea break determina încheierea executiei instructiunii switch, sare peste "case-urile" ramase si se executa codurile care mai sunt (daca exista) dupa "switch". În absenta instructiunii "break", executia trece la urmatoarea instructiune "case" sau "default", fapt nedorit în majoritatea cazurilor.

Nu este necesar sa folositi numere întregi consecutive în instructiunile case ale unei instructiuni switch. Daca preferati, puteti folosi numere întregi non-consecutive, numere cu virgula sau siruri.

2. Operatorul ? :

Operatorul conditional ?:, denumit uneori "operator ternar" sau "operator întrebare-doua puncte", constituie o alta modalitate de a scrie decizii în PHP.
Acest operator formeaza o expresie care se poate folosi în multe contexte PHP. Iata sintaxa de utilizare a acestuia:

  • expresie-conditionala ? valoare-TRUE : valoare-FALSE
Observati cum semnul întrebarii este separat de caracterul doua puncte prin valoarea valoare-TRUE.
Operatorul conditional îsi evalueaza expresia conditionala. Daca expresia este evaluata la valoarea TRUE, operatorul conditional returneaza valoarea valoare-TRUE; în caz contrar, returneaza valoarea valoare-FALSE.
De exemplu, sa luam în considerare urmatoarea instructiune de atribuire, care foloseste un operator conditional:
  • $a = ($b > $c) ? 10 : 20
Aceasta instructiune de atribuire compara valorile variabilelor $b si $c. Daca valoarea variabilei $b este mai mare decât aceea a variabilei $c (adica TRUE), atunci variabilei $a îi este atribuita valoarea 10; în caz contrar, variabilei respective îi este atribuita valoarea 20.

3. Scrierea instructiunilor "for"

Instructiunea for este o instructiune bucla sau o instructiune iterativa; cu alte cuvinte, o instructiune care executa în mod repetat instructiunile asociate.
Sintaxa generala a instructiunii for este urmatoarea:

  • for(expresie1; conditie; expresie2) {
              Instructiune(1);
              Instructiune(2);
              Instructiune(3);
              .............
    }
expresie1 se executa o singura data si anume la inceputul instructiunii; conditie este o expresie logica ; instructiunea for se executa atita timp cat valoarea expresiei : conditie are valoarea TRUE.
De fiecare data dupa executia instructiunilor dintre acolade se executa : expresie2.
Iata un exemplu practic de utilizare a unei instructiuni for:
<?php
$suma = 0;
for ($n=1; $n<=3; $n++) {
          $suma += $n;
          echo "<br /> Suma intregilor de la 1 la $n este $suma.";
}
?>
Rezultatul afisat va fi:
Suma intregilor de la 1 la 1 este 1
Suma intregilor de la 1 la 2 este 3
Suma intregilor de la 1 la 3 este 6
În exemplu se calculeaza suma întregilor cuprinsi între l si 3. Pentru aceasta, mai întâi se initializeaza variabila $suma la valoarea 0. Apoi se executa o instructiune for care incrementeaza în mod repetat valoarea variabilei $suma.
Pentru a vedea cum functioneaza mecanismul acestei instructiuni, sa examinam componentele instructiunilor for.
Instructiunea "for" include trei expresii, care apar între paranteze; fiecare expresie este separata de vecina sa printr-un caracter punct si virgula(;).
  • Prima expresie este expresia de initializare. Aceasta se executa atunci când PHP ajunge la instructiunea for. In exemplu, expresia de initializare atribuie valoarea variabilei $n, ($n=1) variabila denumita "variabila de ciclare" sau "index".
  • A doua expresie este expresia de test. Aceasta este o expresie conditionala care indica daca se executa sau nu corpul instructiunii, în general, face referire la variabila de ciclare. In cadrul exemplului, expresia de test compara valoarea variabilei $n cu valoarea 3 ($n <= 3).
    Expresia de test este evaluata pentru prima data imediat dupa evaluarea expresiei de initializare.
  • Cea de-a treia expresie este expresia pas. în general, aceasta modifica una sau mai multe variabile la care se face referire în expresia test. în cadrul exemplului, expresia pas incrementeaza valoarea variabilei $n ($n++).
Dupa care se trece la corpul instructiunii for, aici, instructiunea $suma += $n si echo "Suma intregilor de la 1 la $n este $suma."; reprezinta corpul instructiunii for.
Dupa executarea corpului functiei se verifica din nou expresia de test (conditie) dintre paranteze, daca rezultatul este TRUE se trece mai departe la expresia "pas" (a treia din paranteze) si mai departe la corpul functiei for. Dupa aia din nou la expresia de test dintre paranteze..., pana cand rezultatul este FALSE (in exemplu nostru, $n>3)

Instructiunea for este utila pentru numarare si executarea în mod repetat a unor actiuni.

4. Scrierea instructiuni while

Practic, instructiunile while si do while reprezinta versiuni "manuale" ale instructiunii for. Daca o instructiune for are trei expresii, o instructiune while sau do while una singura, si anume expresia de test (conditia). Fara o expresie de initializare sau o expresie pas, instructiune "for" opereaza în acelasi mod ca o instructiune "while". în consecinta, urmatoarele doua instructiuni sunt echivalente:

  • for ( ; $i<= 3; ) { $suma += $i; }
    while ($i <= 3) { $suma ++ $i; }
Instructiunea while executa un set de instructiuni atita timp cit valoarea expresiei "conditie" este adevarata:
Forma generala a instructiuni while este urmatoarea :
  • while(conditie) {
              Instructiune(1);
              Instructiune(2);
              Instructiune(3);
              .............
    }
Setul de instructiuni Instructiune(1), Instructiune(2), etc... se vor executa atita timp cit valoarea expresiei logice "conditie" are valoarea TRUE.
Sa studiem un exemplu practic:
<?php
$n = 0;
$suma = 0;
while ($n <= 3) {
          $suma = $suma +$n;
          $n++;
}
echo "Suma este $suma";
?>
In scriptul de mai sus avem la inceput (in afara lui "while") $n = 0 si $suma = 0, se verifica conditia din paranteza a functiei while ($n<=3), cum aceasta este TRUE (deoarece la aceasta etapa $n = 0), se trece la executarea corpului functiei unde : $suma = $suma + $n si $n++ (adica $n = $n + 1), astfel acum $n va fi egal cu 1, se verifica din nou conditia din paranteze, care este TRUE ($n fiind acum egal cu 1), se executa iar corpul functiei..., si tot asa se executa aceasta "bucla" pana cand la verificarea conditiei din paranteze rezultatul este FALSE, in acest moment se incheie executia functiei while si se trece mai departe la urmatoarea functie (in cazul nostru: echo "Suma este $suma";, unde dupa executia functiei while $suma a devenit egala cu 6).
In browser va aparea urmatorul rezultat:
Suma este 6

5. Scrierea instructiuni do while

Diferenta dintre instructiunea while si instructiunea do while este urmatoarea: daca la instructiunea while se verifica intai conditia si numai daca rezultatul este TRUE se trece la executarea corpului functiei, in cazul functiei do while intai se executa corpul functiei si dupa aceea se verifica conditia. De la do while corpul functiei va fi executat cel putin o singura data, indiferent de rezultatul conditiei.
Forma generala a instructiuni do while este urmatoarea :

  • do {
              Instructiune(1);
              Instructiune(2);
              Instructiune(3);
              .............
    } while(conditie);
Iata exemplul prezentat la functia while, de data aceasta folosind functia do while :
<?php
$n = 0;
$suma = 0;
do {
          $suma = $suma +$n;
          $n++;
} while ($n <= 3);
echo "Suma este $suma";
?>
Rezultatul va fi acelasi: "Suma exte 6".

În general, este bine sa fiti prudent si sa folositi instructiunea while, care evalueaza o conditie de test înainte, de executarea corpului acesteia. Astfel, se evita executarea eronata a corpului buclei.

- Lectia 8 Curs realizat de MarPlo

Lectii / Tutoriale

Diverse PHP

Scriere instructiuni conditionale 2 - Tutorial PHP
© Copyright Octombrie 2008 - 2012 Webmaster, Webdesigner : MarPlo