P1 9-27

PHP P1 – canalul youtube thenewboston – phpacademy – 200 vids Vid 9-27

-9- echo

IMG_1236

nu este o functie ci un element (constructie) al limbajului php care afiseaza ce i se da ca argument

Se pot folosi ghilimele

<?php echo “hello”; ?>

sau

<?php echo ‘hello'; ?>

Se pot insera si elemente HTML

echo “<strong>hello</strong>”;

-10-

print

Se foloseste ca si echo doar ca nu poate accepta mai multe argumente date prin virgula.

<?php print “test”; ?>

-11-

Inserarea de cod HTML in php

<?php echo “<input type=”text” name=”name”> ” ; ?>

Pentru evitarea folosirii repetate a ghilimelelor, avem urmatoarele metode:

-1 in loc de ghilimele in interiorul textului se folosesc apostrofuri:

echo “<input type=’text’ name=’name’> ”

– 2 in loc de ghilimele care sa incadreze textul folosim apostrofuri:

echo ‘<input type=”text” name=”name”> ‘

De fapt folosirea ghilimelelor pentru afisarea textelor este utila pentru ca PHP-ul cauta in interiorul textului existenta variabilelor. In cazul apostrofurilor PHP nu mai cauta si afiseaza ceea ce gaseste, de aceea e mai rapid.

Insa atunci cand dorim sa afisam valorile variabilelor folosim ghilimele

<?php $varsta=15; echo ” Dan are $varsta ani. “; ?>

E putin mai lent pentru ca trebuie sa analizeze textul pentru a gasi eventualele variabile.

O a treia varianta este folosirea caracterelor escape, adica plasarea unui caracter backslash in fata unei ghilimele face ca ghilimelele sa fie considerate un caracter oarecare:

-3  folosirea caracterelor escape

<?php echo “<input type=\”text\” name=\”name\”>” ?>

De aici vine si denumirea de escape ale caracterelor escape, asa cum e backslash-ul, el “scapa” de la analiza acele caractere care creaza probleme si care cu ajutorul lui vor fi tratate ca simplu text.

Varianta 2 e cea mai eficienta: echo ‘ <input type=”text” name=”name” value=”introdu numele tau”> ‘;

– 12 – Inserarea de php in HTML

Daca pana acum am inserat HTML in interiorul PHP-ului acum vom proceda invers: – vom insera in interiorul unui element html o valoare prin intermediul php-ului, de fapt prin intermediul instructiunii echo.

Daca in exemplul anterior in loc de “introdu numele tau” am dori sa inseram o valoare care sa se schimbe din php vom proceda astfel:

<?php $text="Salut, introdu numele"; ?>
<input type="text" name="name" value= "<?php echo $text ;  ?> " >

unde variabila $text poate fi schimbata oricand sau poate lua valori diferite in timpul executarii paginii.

– 13 – Comentariile

Comentariil sunt blocuri de text care nu sunt luate in consideratie de catre interpretorul PHP.

Comentariil pot fi utile la transmiterea de informatii celor care citesc codul si care prin intermediul explicatiilor din comentariil pot intelege mai multe despre cod. Deasemeni pot fi transmise informatii despre copyright sau alte lucruri.

O alta situatie cand sunt utile comentariile este atunci cand se incearca depistarea erorilor. Cel mai usor e, in loc de a sterge ceea ce suspectam ca e gresit, sa punem intre comentarii si apoi sa verificam de erori codul ramas.

Comentarea unei linii

<?php //se afiseaza Salutari in browser prin intermediul // instructiunii echo echo “Comentarea unei linii”; ?>

In acest caz am comentat doua linii punand in fata fiecareia cate o pereche de caractere slash

Daca dorim sa comentam un intreg bloc de text vom pun in fata caracterele /* iar la sfarsit */

<?php /* se afiseaza Salutari in browser prin intermediul instructiunii echo Acest tip de comentarii e mai usor de realizat cand sunt mai multe linii de cod */

echo “Comentarea unui bloc” ; ?>

– 14 – 15 – Afisarea sau ascunderea erorilor (Suplimentar)

Atunci cand vizualizam o pagina in browser preferam sa nu vedem erori chiar daca pagina nu este afisata complet. De aceea in mod implicit sunt ascunse erorile de catre server-ul unde este stocata pagina.

Dar pe noi ne intereseaza ca in faza de dezvoltare a aplicatiilor sa vizualizam erorile pentru a le putea trata corespunzator.

Pentru a avea acces la modul in care PHP-ul afiseaza erorile putem deschide fisierul php.ini din folderul unde este instalat PHP-ul. In interiorul fisierului cautam textul error_reporting. Vom gasi explicatii pentru fiecare setare in parte.

De exemplu o setare utila pentru dezvoltatori este

error_reporting = E_ALL pentru afisarea tuturor erorilor

sau

error_reporting= E_ALL | E_STRICT pentru afisarea tuturor erorilor de sintaxa dar si acelor erori care tin mai mult de modul de programare astfel incat programul sa ruleze corect.

Daca nu dorim afisarea anumitor avertismente dar dorim totusi afisarea erorilor error_reporting = E_ALL & ~E_NOTICE care este si valoarea implicita folosita de PHP chiar de la instalare

Daca in schimb error_reporting este setat pe 0

error_reporting = 0

atunci nu vom avea afisata nici o eroare insa vom vedea doar o pagina alba in cazul in care sunt erori. Asta e mai bine decat ca vizitatorii site-ului nostru sa vada eventualele erori.

Pana acum am modificat valoare error_reporting din interiorul lui php.ini. Sa incercam modificarea acestuia dinamic, din interiorul PHP-ului cu ajutorul functiei error_reporting()

<?php error_reporting(0); // nu afiseaza erorile error_reporting(E_ALL);//Afiseaza toate erorile error_reporting(E_ALL ^E_NOTICE);//afiseaza toate erorile mai putin warning-urile ?>

In mod similar se poate folosi functia ini_set ini_set(‘error_reporting’, E_ALL); e similar cu error_reporting(E_ALL);

– 16 – Variabile

In PHP variabilele sunt de forma $nume_variabila

O variabila e o locatie din memorie unde sunt stocate informatii. In plus acesta locatie poate fi modificata si accesata folosind un nume care este asociat cu aceasta. In cazul PHP-ului tipul de informatie pe care il poate avea variabila nu e neaparat stabilit de la inceput.

Daca o variabila $x primeste valoarea 10 $x=10; atunci PHP-ul va trata variabila $x ca fiind de tip numar intreg

Dar daca ar primi o valoare de tip text de exemplu valoarea “acesta este un text” $x=”acesta este un text”; atunci $x va fi considerat o variabila de tip text.

Astfel putem avea situatia $x=10; echo ‘variabila $x area valoarea ‘ , $x, “<br>”;

$x = “acesta este un text”; echo ‘variabila $x are valoarea ‘, $x;

si nu va fi afisata nici o eroare pentru ca variabilele pot avea orice tip pe parcursul rularii programului.

Mai putem avea variabile zecimale (float) $x = 10.5; sau variabile de tip boolean care vor stoca valori de adevarat sau false

$x = true; // sau false utile pentru lucrul cu expresii logice

In concluzie, in PHP e usor de lucrat cu variabile pentru ca nu trebuie sa fixam noi tipul variabilelor ci doar trebuie sa punem semnul $ in fata numelui si lasam PHP sa se ocupe de modul com vor fi tratate.

– 17 – Concatenarea sirurilor de caractere

Dorim sa afisam o data pe care o cream prin concatenare.

Dorim sa afisam sub forma Astazi este Joi, 31 Martie 2011

Mai intai realizam din variabile componentele datei:

<?php $ziua = “Joi”; $data = 31; $luna = “Martie”; $an = 2011; ?>

Si pentru ca afisarea folosind ghilimele permite evaluarea variabilelor vom folosi mai intai metoda cu ghilimele

<?php echo “Astazi este $ziua, $data $luna $an”; ?>

Afiseaza Astazi este Joi, 31 Martie 2011

Daca am fi folosit apostrofuri: echo ‘Astazi este $ziua, $data $luna $an';

atunci ar fi afisat litera cu litera ce este in interiorul apostroafelor: Astazi este $ziua, $data $luna $an

si nu ar fi fost util decat daca am fi dorit sa vedem numele variabilelor

Insa exista si metoda folosind concatenarea: echo ‘Astazi este ‘ . $ziua . ‘, ‘ . $data . ‘ ‘ . $luna . ‘ ‘ .  $an;

Si rezultatul este afisarea sirului obtinut din concatenarea tuturor elementelor: sirul ‘Astazi este ‘ este concatenat cu variabilele $ziua, $data, $luna,  $an si alte cateva siruri de forma  ‘  ‘ cu rol de despartitor intre cuvinte.

Se observa ca desi erau de diferite tipuri, operatorul de concatenare – punct . – le-a transformat intr-un singur text care le contine pe toate.

Putem insera si HTML:

echo ‘Astazi este <strong>’ . $ziua . ‘, ‘ . $data . ‘ ‘ . $luna . ‘ ‘ .  $an . ‘<strong>’ ;

Rezultatul este: Astazi este Joi, 31 Martie 2011

– 18 – Instructiunea IF

In viata reala instructiunea IF s-ar traduce astfel:

Daca procedez intr-un anumit fel voi avea un rezultat altfel voi avea alt rezultat

sau

if( este frumos afara) { vom merge in excursie } else { vom sta acasa }

Valoarea expresiei “este frumos afara” poate lua doua valori: true sau false

Forma generala este:

if(expresie logica) { bloc de instructiuni pentru expresie adevarata } else { bloc de instructiuni pentru expresie falsa }

Nu intotdeauna se executa ceva in cazul in care conditia este falsa, de aceea se poate folosi forma simplificata

if(conditie) { bloc de instructiuni pentru conditie adevarata }

Sa luam alta conditie in care sa comparam siruri de caractere:

$text =”Something”; if($text = =”Something”) { echo “true”; } else { echo “false”; }

va afisa true

Daca schimbam valoarea lui $text $text = “Something else”; va afisa false

– 19 – instructiunea if elseif

Sa luam urmatorul script

<?php

$number= 10; if(number= =10) { echo ‘Equal to ten.'; } else { echo ‘Not equal to ten'; }

E o instructiune if else obisnuita

Dar daca dorim sa comparam $number si cu o alta valoare, de exemplu 11, tot in aceeasi instructiune if,  atunci adaugam un al doilea if pe care il legam de ramura else:

$number=12;

if($number == 10) { echo ‘Equal to ten'; } elseif ( $number == 11) { echo ‘Equal to eleven'; } else { echo ‘not equal'; }

?>

Se afiseaza not equal pentru ca variabila $number nu este egala nici cu 10 nici cu 11

– 20 – Operatori de atribuire

$number = 10;

Inseamna ca am atribuit variabilei $number1 valoarea 10 Adica nu incercam sa comparam $number cu 10, pentru asta se foloseste operatorul logic dublu egal “= =”,  ci sa dam valoarea 10 variabilei $number.

Se poate atribui nu doar o valoare ci si rezultatul unei operatii, de exemplu adunare:

$result = $number + 2; echo $result;

va afisa 12

Variabila $number poate primi o valoare care sa se adune la ea insasi:

$number = $number + 2;

Exista si o scurtatura pentru asta si este operatorul “+=”

adica operatia de mai sus poate fi rescrisa

$number += 2; echo $number;

va afisa 12

Putem avea operatori si pentru celelalte operatii

scadere:

$number = $number – 2;

sau

$number -= 2;

 

inmultire $number = $number * 2;

sau $number *= 2;

impartire $number = $number / 2;

sau $number /=2;

Exista un operator foarte util, modulo, care returneaza restul impartirii. Este reprezentat de semnul %.

Ex:

$rest = $number % 3; echo $rest;

va afisa 1 pentru ca 1 este restul impartirii lui 10 la 3.

La fel se procedeaza si pentru operatorul de concatenare “.=”

$text = ‘hello'; $text .= ‘ world';

// se putea si $text = $text . ‘ world';

echo $text;

va afisa hello world;

 

– 21 – operatorii de comparare

In cazul instructiunii IF, cel mai adesea, expresia logica in urma careia se va decide pe care ramura va merge programul, este data prin operatorii de comparare

Ex:

if(true){ echo ‘inside';}

IF evalueaza expresia “true” care este bineinteles adevarata si alege ramura true si se afiseaza inside

In loc de “true” putem folosi o expresie logica de forma 1 == 1 si efectul e acelasi

 

if( 1 == 1){ echo ‘inside';}

expresia 1 == 1 este evaluata si rezultatul este true

Daca in schimb vom folosi expresia 1 == 2 rezultatul evaluarii ei este fals si instructiunea

if (1 = = 2){ echo ‘inside';}

nu va afisa nimic pentru ca nu se va merge pe ramura true.

 

Alt operator de comparare este not equal “!=” care decide daca o valoare nu este egala cu cea de-a doua

In acest caz 1 != 2 este true pentru ca intr-adevar 1 nu este egal cu 2 iar instructiunea

if(1 != 2){ echo ‘inside';}

va afisa inside pentru ca expresia 1 != 2 este adevarata

Se mai foloseste pentru operatorul not egal si forma “<>” deci putem avea expresia 1 <> 2 care este tot adevarata

 

Avem doua variabile

<?php
$number1 = 10;
$number2 = 9;
?>
Sa le comparam
<?php
if($number1 > $number2)
{ echo 'Yes.'; } else { echo 'No.';
}
?>

 

Daca $number1 mai mare decat $number2 atunci afiseaza Yes altfel afiseaza No

In acest caz va afisa Yes

 

daca schimbam cu operatorul “<” mai mic

$number1 < $number2 atunci se va afisa  No

 

Pentru verificarea si a egalitatii se poate folosi operatorul >= mai mare sau egal

sau

<= mai mic sau egal

 

Exemplul anterior poate fi rescris:

<?php
$number1 = 10;
$number2 = 10;

if($number1 >= $number2)
{echo 'Yes.';
}
else
{echo 'No.';
}
?>

 

va afisa Yes pentru ca $number1 este mai mare sau egal cu $number2

 

Operatori de comparatie:

= = verifica egalitatea

!= not equal

<= mai mic sau egal

>= mai mare sau egal

 

Sa luam un exemplu concret.

Sa verificam daca parola introdusa intr-un formular e cea corecta pentru logare:

 

<?php
$password = 'parolaMea';
if($password == 'parolaMea')
{echo 'Corect';
}
else
{echo 'Incorect';
}

 

In acest caz va afisa Corect dar daca $password ar fi un alt cuvant

$password=’altaParola';

atunci ar fi afisat Incorect

 

– 22 – Operatorii matematici

Adunarea, scaderea, inmultirea si impartirea sunt reprezentate la fel ca la matematica prin +, -, *, /.

In plus, tot intre operatorii aritmetici, exista operatorul modulo reprezentat de simbolul procent “%”. Acesta returneaza restul impartirii intre doua numere.

Mai avem operatorul de incrementare “++” si operatorul de decrementare “–”

 

Exemple:

<?php
$sum = 10 + 20;
echo $sum;
// afiseaza 30

$sub = 10 - 20;
echo $sub;
// afiseaza -10

$mult= 10 * 20;
echo $mult;
//afiseaza 200

$div = 10 / 20
echo $div;
//afiseaza 0.5
?>

 

Sa lucram acum cu variabile si sa cream o expresie mai complexa

 

<?php
$number1 = 100;
$number2 = 50;
$number3= 2;

$result = ($number1 + $number2) / $number3;
echo $result;
//afiseaza 75
?>

 

Un exemplu pentru modul

<?php
$number1 = 10;
$number2 = 3;
$result = $number1 % $number2;
echo $result;
//se afiseaza 1, restul impartirii lui 10 la 3
?>

 

Operatorul de incrementare ++ este o prescurtare pentru operatia de adunare cu 1.

<?php
$number1 = 10;
$number1++;
echo $number1;
//afiseaza 11

$number1--;
echo $number1;
//afiseaza 10, a scazut 1 din 11 cat devenise $number1
?>

Incrementarea este folosita mai ales in bucle unde trebuie stiut de cate ori s-a executat bucla pentru a se opri la un moment dat. Asa ca o incrementare de forma $i++ e mai comoda decat $i=$i+1 desi e acelasi lucru.

 

Operatori aritmetici

(+ plus,

– minus,

* produs,

/ impartire,

% rest,

++ incrementare,

— decrementare)

sunt cel mai des folositi in programare

 

– 23 – Operatorii logici

Sa presupunem ca avem un numar $number si dorim sa verificam daca se incadreaza intr-un anumit interval.

Intervalul este dat de $lower (cel mai mic) si $upper (cel mai mare)

 

<?php
$number=654;

$upper = 1000;
$lower = 500;
?>

Sa verificam daca $number se afla in intervalul specificat

 

 if($number este mai mare decat $lower si $number e mai mic decat $upper)
{
echo 'Ok, $number se incadreaza in interval';
}

Expresia logica din interiorul lui if, ($number este mai mare decat $lower si $number e mai mic decat $upper) se poate scrie, in mod firesc

$number > $lower si $number < $upper

 

In plus, acel si dintre cele doua expresii logice se poate inlocui cu operatorul AND sau &&

Astfel expresia logica devine

($number > $lower && $number < $upper)

 

<?php
if($number > $lower && $number < $upper)
{echo 'Ok, $number se incadreaza in interval';
}
?>

 

Se afiseaza Ok pentru ca valoarea lui $number, 654 se incadreaza in intervalul 500, 1000.

Daca $number primeste o valoare mai mare, $number = 10500, nu se afiseaza nimic pentru ca nu se afla in interval.

 

Sa afisam un avertisment de forma: numarul trebuie sa se afle in intervalul 500 – 1000. De aceea vom construi si ramura else.

 

<?php
if($number > $lower && $number < $upper)
{echo 'Ok, $number se incadreaza in interval';
}
else
{echo 'Numarul trebuie sa se afle in intervalul '. $lower. ' - ' . $upper;
}
?>

 

Astfel daca numarul se afla in intervalul dorit se afiseaza ok altfel se afiseaza avertismentul din ramura else.

 

Vom analiza aceasta expresie logica

exp: ($number >$lower && $number < $upper)

 

este formata din doua expresii mai mici:

expresia1: $number > $lower

si

expresia2: $number < $upper

 

Exemplul de pana acum s-a referit la folosirea operatorului logic Si, &&

Acesta impune ca atat partea stanga cat si partea dreapta sa fie adevarate ca rezultatul sa fie adevarat

Daca

expresie1 == true

SI

expresie2 == true

atunci exp= expresie1 && expresie2 este true

 

Prin urmare operatorul Si este un operator care constrange ca ambii termeni sa fie adevarati.

Nu la fel stau lucrurile cu operatorul SAU unde daca un termen e adevarat rezultatul e adevarat.

Exemplu: Sa verificam daca un numar $number este egal cu numarul $canbe1 sau cu numarul $canbe2.

 

Daca e egal cu unul dintre ele afisam un mesaj Ok

 

Vom folosi expresia

exp: ($number == $canbe1 || $number == canbe2)

formata din expresiile

expresie1: $number == $canbe1

si

expresie2: ($number == $canbe2

 

Astfel putem prescurta exp : ex1 || ex2

 

<?php
$number = 500;
$canbe1 = 2;
$canbe2 = 4;

if($number == $canbe1 || $number == canbe2)
{echo 'Ok';
}
?>

 

Nu se afiseaza nimic pentru ca expresia

exp ($number == $canbe1 || $number == $canbe2) are ambii termeni falsi adica atat

 

ex1  $number == $canbe1

cat si

ex2 $number == $canbe2

 

sunt false, $number nefiind egal nici cu 2 si nici cu 4.

prin urmare

expresia (ex1 || ex2) este falsa

 

Daca $number ia valoarea 2 atunci expresia devine adevarata

 

$number == $canbe1 // este true

||

$number == $canbe2 //  este false

 

rezultatul final insa este adevarat pentru ca unul din termeni este adevarat

si ex1 || ex2 este true

 

Se va afisa Ok

 

Daca $number ia valoarea 4 atunci se inverseaza:

ex1 este false dar

ex2 este true

 

iar ex1 || ex2 este true

Se va afisa si aici Ok

 

Operatorul negare !

Putem folosi operatorul !, negare pentru a inversa valoarea de adevar a conditiilor

Avem aceleasi variabile ca mai inainte.

 

$number = 500;

$canbe1 = 2;

$canbe2 = 4;

 

Daca ne intereseaza ca expresia anterioara sa fie adevarata atunci o putem nega ca din falsa sa devina adevarata. Negarea lui 0 este 1. Negarea unei expresii falsa este o expresie adevarata.

Pentru a da un rezultat in cazul in care numarul $number nu este egal cu nici unul dintre numerele $canbe1 si $canbe2  atunci putem nega intrega expresie astfel

 

if  ! ($number == $canbe1 || $number == $canbe2)
{echo "Numarul $number nu este egal cu niciunul dintre numere";
}

($number == $canbe1 || $number == $canbe2) da rezultat fals, prin negare o facem sa dea rezultat adevarat:

 

!($number == $canbe1 || $number == $canbe2) este adevarata

 

Daca se aplica negatia pentru fiecare membru al expresiei avem:

operatorul || devine &&

 

!($number == $canbe1) && !($number == $canbe2)

 

adica $number nu este egal cu $canbe1 si $number nu este egal cu $canbe2

ceea ce este adevarat, fiind negarea expresiei ( ($number este egal cu $canbe1) sau ($number este egal cu $canbe2) ) care era falsa

 

Se poate si invers, daca avem o expresie de forma exp: ex1 && ex2, prin negare

!exp : !ex1 || !ex2

 

Concluzie

Operatorii logici sunt:

&& si logic

|| sau logic

! negare logica

 

Negarea unei expresii logice compuse

!(ex1 || ex2)  <=>  !ex1 && !ex2

!(ex1 && ex2)  <=>  !ex1 || !ex2

 

 

–     24 – Egalul triplu

Sa cream doua variabile $num1 si $num2

<?php
$num1= '1';
$num2=1;

if($num1==$num2)
{echo 'Equal.';
}
else
{echo 'Not equal';
}
?>

 

Se va afisa Equal

Exista totusi o problema de logica a operatiilor. Variabila $num1 este un sir de caractere iar variabila $num2 este un numar intreg. Din punct de vedere al tipului de date sunt diferite iar in marea majoritate a limbajelor de programare astfel de variabile nu ar fi egale. Dar PHP converteste automat sirurile de caractere care reprezinta numere in numerele corespunzatoare astfel incat sunt permise operatii care ar fi posibile doar numerelor.

Astfel ‘1’ == 1 este o expresie adevarata si prin urmare si ($num1 == $num2) este adevarata. Altfel spus operatorul == este unul permisiv care admite ca operanzii sa fie de tipuri diferite dar daca sunt compusi din aceleasi caractere sunt considerati egali.

Daca insa dorim sa luam in consideratie si tipul de date al variabilelor atunci vom folosi egalul triplu ===. In acest caz variabilele nu mai sunt egale pentru ca se face distinctie intre tipurile lor.

 

<?php
$num1= '1';
$num2 = 1;

if($num1 === $num2)
{echo 'Equal.';
}
else
{echo 'Not equal';
}
?>

 

Se va afisa Not equal

 

Sa analizam modul in care se folosesc operatorii =, == si ===

= operatorul de atribuire

== operatorul de comparatie care nu tine cont de tipurile de date

=== operatorul de comparatie care tine cont de tipurile de date.

 

Daca dorim sa comparam doua valori, de exemplu o variabila care contine un numar intreg si o alta valoare obtinuta dintr-un formular atunci nu ne intereseaza daca sunt numere ci sa corespunda ca si caractere, prin urmare dublu egal == va fi suficient.

Sunt si cazuri, de exemplu,  atunci cand avem de a face cu fisiere, si dorim sa fim cat mai exacti din punct de vedere a valorilor inserate in interiorul lor si a tipurilor de date, in acest caz vom folosi egalul triplu ===.

Depinde de cat de rigurosi dorim sa fim din punct de vedere a tipurilor de date, in functie de asta alegem tipul de operator de comparatie – egalitate.

 

– 25 – Bucla while

 

Adesea ne dorim ca anumite actiuni sa fie repetate de mai multe ori. Si atunci spunem ca aceste actiuni fac parte dintr-o bucla repetitiva.

Ce este o bucla?

Sa exemplificam pentru bucla while:

 

<?php
while(conditie)
{
instructiuni...
}
?>

 

Atat timp cat conditie e adevarata se executa ce se afla in interiorul acoladelor de cate ori este necesar pana cand conditie devine false.

Este asemanatoare cu instructiunea if atat doar ca while nu are ramura else insa ramura true se executa pana cand conditie nu mai este adevarata.

Depinde de noi ca expresia logica conditie sa devina falsa la un moment dat, altfel bucla while nu s-ar termina niciodata.

 

De exemplu ar fi o idee proasta sa folosim bucla while cu o conditie care este tot timpul adevarata:

while(1)

{

echo ‘Hello<br>';

}

 

In acest caz ar afisa Hello la infinit si pagina web s-ar bloca.

 

Pe de alta parte daca vom pune ca si conditie valoarea 0, fiind automat falsa, nu se va executa nimic.

while(0)
{
echo 'Hello<br>';
}

 

ar fi echivalent cu

if(0)
{
echo 'Hello<br>';
}

si bineinteles nu se executa nimic in ambele cazuri pentru ca nu se porneste niciodata pe ramura true conditia fiind falsa (valoarea 0)

 

Sa cream o conditie care sa fie adevarata doar de un numar finit de ori.

Cream o variabila $contor care sa numere de cate ori se va executa bucla.

 

$contor = 1;

Sa presupunem ca dorim sa se execute de 10 ori. Atunci bucla se va termina cand $counter va ajunge la valoarea 10.

Adica verificam de fiecare data daca variabila $contor este mica sau egala cu 10

while($contor <=10)

 

Totusi daca nu incrementam variabila $contor, aceasta nu va ajunge niciodata la 10 asa ca avem grija sa o incrementam in interiorul buclei:

<?php
$contor=1;
while($contor <=10)
{
echo 'Hello<br>';
$contor++;
}
?>

 

Variabila $contor porneste de la valoarea 1, este incrementata in interiorul buclei si pe masura ce este incrementata este verificata daca a ajuns la 10. Insa cand a ajuns la 11, nu mai respecta conditia ca sa fie mai mica sau egala cu 10 si atunci bucla este intrerupta.

Astfel, rezultatul este:

Hello a fost afisat de 10 ori exact cat i-am spus in conditie.

 

Ca sa fie vizibila incrementarea variabilei $contor vom modifica putin codul de mai sus astfel incat sa fie afisata din interiorul buclei si valoarea $contor:

<?php
$contor=1;
while($contor <=10)
{
echo $contor.' Hello<br>';
$contor++;
}
?>

 

In acest fel va fi afisat:

1 Hello

2 Hello

10 Hello

 

– 26 – Buclele do {} while ()

 

Spre deosebire de bucla while() {} unde continutul buclei {} era executat doar daca conditia () era macar o singura data adevarata, bucla do {} while () executa o data bucla {} si apoi verifica daca conditia () este adevarata.

Prin urmare bucla do while va executa macar o data codul indiferent de conditie.

Este utila in acele conditii cand o anumita serie de actiuni trebuie executate indiferent daca conditia de oprire este falsa sau nu.

 

do

{

echo ‘This will ALWAYS show';

} while (0);

 

Va afisa o singura data “This will ALWAYS show” chiar daca conditia de oprire este falsa.

In exemplul anterior, in cazul lui while, daca conditia de oprire era 0 atunci nu se afisa nimic.

 

Dar sa incercam sa afisam un text de 10 ori la fel cum am procedat la while

 

$counter=1;
do
{
$counter++;
echo 'This will ALWAYS show <br>';
} while ($counter<=10);

 

Se va afisa de 10 ori “This will ALWAYS show” .

Dar se va afisa macar o data chiar daca conditia ar fi de forma ($counter<=0)

 

In concluzie bucla do while este asemanatoare buclei while, diferenta fiind faptul ca bucla {} se executa macar o data in cazul lui do while.

 

– 27 – Bucla de ciclare FOR

Bucla for este asemanatoare buclei while fiind de forma

for(){}

 

Pentru controlul executiei buclei se vor folosi 3 expresii.

Ex.

Ne dorim sa afisam valoarea unei variabile $count pe masura ce creste de la 1 la 10. Vom insera in blocul de executat

{echo $count . '<br>';}

pentru ca ne dorim sa afisam pe cate un rand valoarea lui $count

 

for($count=1; $count<=10; $count++)
{echo $count.'<br>';}

 

Sa analizam cele 3 expresii dintre paranteze

for(

$count=1; // expresia de initializare, se initializeaza variabila contor $count cu valoarea de pornire

$count <= 10; // conditia de oprire, se verifica daca variabila contor  ajunge la valoarea unde se opreste executia buclei

$count++ )// expresia de incrementare, se incrementeaza variabila contor pana cand conditia de oprire devine falsa

Astfel la modul general for are forma

for(expresie initializare; conditie oprire; expresie incrementare)
{
bloc instructiuni
}

 

Ordinea de executie:

1)       $count = 1; se initializeaza variabila contor o singura data la inceputul executiei lui for

Apoi pe masura ce se executa bucla

2)       se verifica conditia de oprire $contor<=10

3)      se executa codul din interiorul acoladelor

4)      se incrementeaza variabila $contor  $contor++

Se executa pasii 2,3 si 4 pana cand la pasul 2 conditia de oprire este falsa

Astfel se afiseaza:

1 Hello
2 Hello
...
10 Hello

 

Dar daca dorim sa decrementam de la 10 la 1?

 

for($contor=10  ;  $contor >=1  ;  $contor–)

{echo $contor . ‘ Hello';}

 

initializarea :   $contor = 10;

se verifica daca $contor e mai mare sau egal cu 1 : $contor >= 1;

se decrementeaza $contor pana va ajunge egala cu 0: $contor —

In general bucla for se foloseste atunci cand avem de a face cu numaratori exacte, asa cum este exemplul acesta de afisare a textului Hello de 10 ori. Instructiunea while se foloseste mai ales cand nu se poate sti cu exactitate de cate ori va fi executata bucla.

 

– 27 – instructiunea switch()

Switch este o modalitate mai rapida de a alege o optiune, mai rapida decat if-ul pentru ca permite mai multe alternative. Switch inseamna buton sau intrerupator dar e mai degraba un panou de control cu oricate butoane fiecarui buton corespunzandu-i o actiune. De aceea switch-ul e in unele limbaje de programare folosit in realizare meniurilor cu multe optiuni.

In cazul nostru vom folosi pentru a desemna o optiune, variabila $number.

Pentru o anumita valoare pe care o poate lua $number se alege executia unui bloc de cod:

<?php
$number = 1;

switch($number)
{
case 1:
echo "Optiunea 1"; break;
case 2:
echo "Optiunea 2"; break;
case 3:
echo "Optiunea 3"; break;

}
?>

Va afisa Optiunea 1

Ce am realizat? Am creat un mic program care converteste numere in informatie text. Astfel daca $number = 1 atunci se afiseaza Optiunea 1, daca $number = 2 se afiseaza Optiunea2 …

Cum s-ar fi realizat lucrul asta cu ajutorul lui if?

 

if ($number == 1)
{
echo "Optiunea 1";
}
elseif($number == 2)
{
echo "Optiunea 2";
}
elseif($number==3)
{
echo "Optiunea 3";
}

E mai greu de urmarit un program cu atatea ramuri de executie de aceea se prefera folosirea unui switch.

Totusi in cazul in care $number nu ar fi fost egal cu niciunul dintre numerele 1,2,3 pentru if am fi avut o rezolvare, ramura else. In cazul lui switch nu avem else insa avem ceva similar, ramura default:

 

<?php
$number = 4;

switch($number)
{
case 1:
echo "Optiunea 1"; break;
case 2:
echo "Optiunea 2"; break;
case 3:
echo "Optiunea 3"; break;
default:
echo "Nu se incadreaza in nici o optiune"; break;
}
?>

 

Se afiseaza “Nu se incadreaza in nici o optiune”;

Se observa ca la finalul fiecarei zone de cod din fiecare optiune exista instructiunea break. Aceasta are rolul de a intrerupe executia codului pentru acea ramura. Daca nu ar fi break la final atunci s-ar executa si urmatoarea ramura. Ce rost ar avea totusi instructiunea switch in acest caz? Exista uneori si situatii cand utilizarea ei are sens fara sa folosim break.

De exemplu, se primeste ca valoare numele unei zile a saptamanii. Se cere sa se decida daca este o zi lucratoare sau o zi din weekend;

<?php
$day="sambata";
switch($day)
{
case "sambata":
case "duminica": echo 'It 's weekend'; break
default: echo 'It's week day'; break
}
?>

Se va afisa It’s weekend pentru ca va alege ramura “sambata” dar va executa si ramura urmatoare pentru ca nu a gasit nici un break, iar la ramura “duminica” va executa codul pana gaseste instructiunea break.

Daca $day ia valoarea “marti” atunci se va alege ramura default, nefiind nici o optiune cu valoarea “marti” si se va afisa It’s week day.