This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA
Linia urmatoare este generata de PHP:
"; ?> Incarcati fisirul direct in navigator (prin File/Open) si apoi copiati fisierul in directorul htdocs al serverului de Web si incarcati adresa http://localhost/a2121.php
Cap 2.1.3. Tipuri de date. Conversii de tip
Limbajul PHP suporta urmatoarele tipuri de date: • • • • •
Integer - utilizat pentru numere intregi Double - utilizat pentru numere reale String - utilizat pentru siruri de caractere Array - utilizat pentru a stoca date multile de acelasi tip Object - utilizat pentru a retine obiecte - instante ale claselor
In plus, PHP suporta si tipurile pdfdoc respectiv pdfinfo pentru a asigura suport pentru PDF (standardul Portable Document Format). PHP este un limbaj slab tipizat. In limbajele puternic tipizate, o variabila poate retine un singur tip de date pe toata durata sa de viata, tip asignat la declararea acelei variabile. In PHP [email protected].
varibilele nu trebuie declarate explicit (ele sunt considerate ca fiind declarate implicit la prima lor utilizare in cod), iar tipul de date asignat este determinat de valoarea retinuta in acel moment. Urmatoarele linii de cod sunt corecte in PHP (numele variabilelor PHP sunt prefixate de semnul $): $var1 = 1; $var1 = "sirul 1"; Tipul datelor extrase din variabile poate fi schimbat fortat (casting sau conversie de tip) in expresiile unde acestea intervin. Acest lucru se face prin precizarea noului tip intre paranteze rotunde in fata variabilei respective: $var1 = 1; $var2 = (double)$var1 + 3.52; Conversia de tip nu afecteaza tipul real al varibilei. Cap 2.1.4. Identificatori. Constante
Identificatorii sunt cuvinte care denota entitati intr-un program. Exemple de identificatori sunt: numele de variabile, de functii sau de clase. In PHP identificatorii trebuie sa respecte urmatoarele reguli: • • •
Identificatorii pot fi de orice lungime si pot fi formati din litere, cifre, liniuta de subliniere sau semnul dolar. Identificatorii nu pot incepe cu o cifra. Identificatorii sunt de tip "case sensitive" (tin cont de litere mici-mari). Spre exemplu, $numepers este diferit de $numePers. Singurii identificatori care nu respecta aceasta regula sunt cei care denota nume de functii PHP predefinite.
PHP permite folosirea a doua tipuri de constante. Constantele de tip valoare sunt precizate direct in expresii dependent de tipul lor: • • •
constantele intregi: 0, 100, -1320 constantele de tip double: 0.00, 3.1523, -4.5 constantele de tip sir de caractere: "sir1", 'sir2', 'sir cu "gilimele"! ', "sir cu 'apostrof'! "
Constantele cu nume se aseamana cu varibilele, dar valoarea lor nu poate fi schimbata de-a lungul programului. Pentru a face codul scris mai lizibil se obisnuieste ca numele varibilelor sa fie scrise in intregime cu litere mari. O diferenta notabila fata de variabile este aceia ca numele acestora nu sunt precedate de semnul $. Declararea cosntantelor se face cu ajutorul cuvantului cheie define. ... define("PI",3.14); $unUnghi = PI; $altUnghi = 2*PI; Cap 2.1.5. Variabile utilizator. Variabile referinta. Domeniu de valabilitate
Variabilele sunt locatii de memorie desemnate printr-un identificator care incepe cu semnul $. Ele permit memorarea valorilor de diverse tipuri. Tipul unei variabile PHP poate fi modifcat in momentul cand i se asigneaza o valoare. Declararea variabilelor utilizator nu trebuie facuta explicit. O variabila se considera declarata implicit prima data cand este folosita. [email protected].
Pentru a asigna o valoare unei variabile se va folosi operatorul = sub forma $variabila = expresie. Daca $variabila nu exista ea va fi creata in prealabil apoi i se va asigna valoarea expresiei. Varibilele referinta permit schimbarea numelui unei variabile in mod dinamic. Acest lucru se face prin utilizarea valorii unei varibile pe post de nume de variabila. Indirectarea se realizeaza prin utilizarea marcajului dolar '$' in fata numelui variabilei referinta, ca si in exemplul urmator: $var1 = 5; $var2 = "var1"; echo "Valoarea din var1 este "; echo $var1; echo " sau "; echo $$var2; In acest exemplu notatia $$var2 a fost folosita pentru a desemna valoarea retinuta de varibila $var1. Prin domeniul de valabilitate a unei variabile se intelege locurile in care o variabila poate fi folosita (este vizibila) dupa ce a fost creata. Domeniile definite de PHP sunt urmatoarele: • • •
Global - varibilele globale, definite in afara functiilor sunt vizibile in tot fisierul curent, mai putin in interiorul functiilor. Locale unei functii - variabilele create in functii sunt vizibile doar in interiorul acestora. Globale in interiorul unei functii - acest tip de varibile sunt folosite pentru a accesa variabilele globale cu acelasi nume.
Cap 2.1.6. Accesarea variabilelor din form-uri HTML
Principalul mecanism de colectare a datelor de la utilizatori prin intermediul unui site Web il reprezinta formularele HTML (HTML forms). Din acest motiv, limbajul PHP pune accent pe facilitarea accesului la aceste date. Un formular HTML cuprinde campuri in care utilizatorul (cel care acceseaza pagina) poate introduce date. Pentru procesarea acestor date formularul defineste o actiune numita submit (trimitere), care corespunde de obicei apasarii unui buton cu acelasi titlu. Rezultatul acestei actiuni este accesarea unei alte pagini (pagina tinta - target) care va primi automat valorile completate in campurile formularului si le va prelucra. In cadrul subiectului prezentat, paginile tinta ale formularelor vor fi fisiere PHP, paginile cuprinzand formularele putand fi fisiere PHP sau HTML. Mai multe informatii despre formulare HTML se pot obtine la adresa http://www.w3.org/MarkUp/. In PHP datele dintr-un formular HTML pot fi accesate prin doua metode. Prima metoda, mai simpla dar mai inceata si mai nesigura, consta in folosirea varibilelor inregistrate global. In acest fel numele campurilor dintr-un formular HTML devin automat varibile PHP, cu valori setate corespunzator, in pagina tinta a formularului. Transmiterea se face asemanator cu transmiterea parametrilor spre functii. Pentru a putea folosi aceasta metoda trebuie ca fisierul de configurare php.ini sa aiba setarea register_globals pe valoarea "On". A doua metoda presupune obtinerea valorilor din doua tablouri create automat si denumite $HTTP_POST_VARS, respectiv $HTTP_GET_VARS corespunzator metodei de trimitere din formular spre server (post sau get). Indicele de acces in tablou va fi chiar numele campului dorit din formular. [email protected].
Din motive de claritate in general se utilizeaza prima metoda. In schimb, in scripturile profesionale, unde viteza si securitatea sunt determinante, a doua metoda este de preferat. Creati fisierul a2161.html cu urmatorul continut:
[email protected].
$a = 3; $b = 11; $c = 4.7; echo "a = "; echo $a; echo "
"; echo " b = "; echo $b; echo "
"; echo " c = "; echo $c; echo "
"; echo "a - b = "; echo $a - $b; echo "
"; echo "a * c = "; echo $a * $c; echo "
"; echo "b % a = "; echo $b % $a; echo "
"; echo "b % c = "; echo $b % $c; echo "
"; echo "b + --a= "; echo $b + --$a; echo "
"; echo "a / 0 = "; echo $a / 0; echo "
"; ?> Copiati fisierul in directorul htdocs al serverului de Web si incarcati adresa http://localhost/a2211.php
Cap 2.2.1.2. Operatori pe siruri de caractere In PHP exista un singur operator pe siruri de caractere, restul operatiilor fiind efectuate prin intermediul unor functii din biblioteca standard a limbajului. Acest operator este operatorul de concatenare - punct '.'. $s1 = "Sirul 1"; $s2 = "Sirul 2"; $s3 = $s1."-".$s2; // s3 = "Sirul 1-Sirul 2" Cap 2.2.1.3. Operatori de asignare Operatorii de asignare permit atribuirea de valori varibilelor. Cel mai simplu operator este operatorul '='. El are doi operanzi: o variabila in partea stanga si o expresie in partea dreapta. Valoarea expresiei este evaluata apoi atribuita variabilei din partea stanga si, in final, returnata de operator. Deoarece = nu este o intructiune PHP ci un operator, el poate intra in expresii complexe de genul: $a = $b = 4 + ($c = 3); // a = 7, b = 7, c=3 In plus fata de operatorul de asignare simplu, PHP pune la dispozitia programatorilor si operatori de asignare combinati: Operator Utilizare
Echivalent cu
+=
$a += $b $a = $a + $b
-=
$a -= $b
$a = $a - $b
*=
$a *= $b
$a = $a * $b
/=
$a /= $b
$a = $a / $b
%=
$a %= $b $a = $a % $b
.=
$s1 .= $s2 $s1 = $s1 . $s2
Cap 2.2.1.4. Operatori de referire Varsiunea PHP 4 a introdus un nou operator si anume operatorul de referire '&'. El este un operator unar, avand ca operand o variabila si permite legarea unui nume de variabila de zona de memorie a varaibilei operand. Spre exemplu se considera secventa: [email protected].
$a = 3; $b = $a; // a = 3, b = 3 $b = 5; // a = 3, b = 5 In urma acestei secvente vor exista doua variabile independente $a si $b. Modificarea ulterioara a valorii lui $b nu afecteaza valoarea retinuta de $a. Daca, in schimb, consideram secventa: $a = 3; $b = &$a; // a = 3, b = 3 $b = 5; // a = 5, b = 5 Se va observa ca $b nu este o varibila independenta ci este un nou nume pentru variabila $a (ambele vor indica spre aceiasi zona de memorie). Orice modificare a valorii lui $b va afecta in aceiasi masura si valoarea lui $a. Cap 2.2.1.5. Operatori de comparare Operatorii de comparare sunt operatori binari care au ca si scop compararea valorilor operanzilor. Rezultatul acestor operatori este unul logic, avand valoarea true (adevarat) sau flase (fals). Acestia sunt: Operator Denumire
Exemplu
==
egalitate
$a == $b
===
test de identitate $a === $b
!=
inegalitate
$a != $b
<>
inegalitate
$a <> $b
<
mai mic
$a < $b
>
mai mare
$a > $b
<=
mai mic egal
$a <= $b
>=
mai mare egal
$a >= $b
Daca operanzii nu sunt de acelasi tip se va incerca conversia operanzilor pentru a deveni compatibili si apoi se va face comparatia. In cazul operatorului test de identitate '===' operanzii nu sunt considerati egali daca nu au acelasi tip. Cap 2.2.1.6. Operatori logici Operatorii logici sunt utilizati pentru a combina valori logici in expresii. Acestia sunt: Operator Denumire
Rezultat
!
negare
!$a neaga valoarea logica a lui $a
&&
si logic
$a && $b intoarce adevarat doar daca ambele valori $a si $b sunt adevarate
and
si logic
$a and $b intoarce adevarat doar daca ambele valori $a si $b sunt adevarate
||
sau logic
$a || $b intoarce adevarat daca cel putin una dintre valorile lui $a sau $b este adevarata
or
sau logic
$a or $b intoarce adevarat daca cel putin una dintre valorile lui $a sau $b este adevarata
xor
sau exclusiv $a xor $b intoarce adevarat daca $a si $b au valori logice diferite
Cap 2.2.1.7. Operatori pe biti Operatorii pe biti ajuta la prelucrarea numerelor intregi considerate ca siruri de biti. [email protected].
Acestia sunt: Operator Denumire
Rezultat
~
negare pe biti
~$a inverseaza valorilor tuturor bitilor lui $a
&
si pe biti
$a &$b doar biti pe 1 in $a si $b simultan sunt setati pe 1 in rezultat
|
sau pe biti
$a | $b biti pe 1 in $a sau $b sunt setati pe 1 in rezultat
^
sau exclusiv pe biti $a ^ $b bitii setati in $a sau $b dar nu in ambele sunt setati pe 1 in rezultat
<<
deplasare stanga
$a << $b deplaseaza bitii din $a la stanga cu $b pozitii
>>
deplasare dreapta
$a >>$b deplaseaza bitii din $a la dreapta cu $b pozitii
Cap 2.2.1.8. Operatori aditionali Operatorii prezentati in acest subcapitol sunt: operatorul conditional, operatorul de suprimare a erorilor si operatorul de executie. Operatorul conditional are sintaxa: conditie ? valoare_adevarata : valoare_falsa Operatorul evalueaza mai intai expresia logica din conditie. Daca conditia este adevarata va intoarce expresia valoare_adevarata iar in caz contrar valoare_falsa. Exemplu: echo ($varsta < 18) ? "adolescent" : "matur"; Operatorul de suprimare a erorilor '@' are sintaxa: @(expresie) El are rolul de a suprima erorile si avertismentele generate de expresia operand. Exemplu: $a = ($b / 0); // genereaza avertisment de impartire la zero $a = @($b / 0 ); // nu genereaza avertisment In cel de al doilea caz, valoarea lui $a va fi setata pe valoare vida ( convertita la 0 ca intreg). Operatorul de executie poate fi folosit pentru a executa o comanda pe interpretorul de comenzi al serverului. El consta in doua apostroafe inverse '`'intre care este plasata comanda de executat. Exemplu `ls -al`. Operatorul de executie actioneaza doar daca optiunea safe_mode din php.ini este dezactivata (Off). In general acest operator nu se foloseste datorita breselor de securitate pe care le deschide pe server. Cap 2.2.2. Expresii
O definitie simpla a expresiilor PHP este urmatoarea: "expresie = orice are o valoare". Cea mai mare parte a unui program PHP consta in expresii. Expresiile combina operanzi si operatori de diverse tipuri: constante, variabile sau nume de functii.
[email protected].
La evaluarea expresiilor operatorii se vor aplica intr-o ordine prestabilita, data de "precedenta" lor. Tabelul urmator prezinta operatorii in ordinea inversa a precedenteiv lor (in fata sunt cei mai putin prioritari). Precedenta Asociativitate Operator 1
stanga
,
2
stanga
or
3
stanga
xor
4
stanga
and
5
stanga
= += -= *= /= .= %=
6
stanga
?:
7
stanga
||
8
stanga
&&
9
stanga
|
10
stanga
^
11
stanga
&
12
-
== != ===
13
-
< > <= >=
14
stanga
<< >>
15
stanga
+-.
16
stanga
*/%
17
dreapta
! ~ ++ -- @
18
dreapta
[]
19
-
new
20
-
()
O atentie deosebita trebuie acordata sirurilor de caractere intre ghilimele " ". La evaluarea expresiei in care acestea apar, toate numele de variabile care apar in interiorul lor sunt inlocuite cu valorile corespunzatoare. Exemplu: $nume = "Vasile"; $sir1 = "Domnul $nume are masina rosie!"; $sir2 = 'Domnul $nume are masina rosie!'; echo $sir1; // afiseaza Domnul Vasile are masina rosie! echo $sir2; // afiseaza Domnul $nume are masina rosie! Activitate 2 Creati fisierul a2221.php cu urmatorul continut:
"; echo $prop1; $prop2 = "Domnul ".$nume." are salar ".(($salar<1000)?"mic":"mare")."!
"; echo $prop2; [email protected].
$salarNou = &$salar; // salarNou indica spre salar $procentMarire = 26; // procentul cu care se mareste salarul $salarNou += $salarNou*($procentMarire / 100); $prop3 = " Salarul sau dupa marire este de $salar $."; // salar si salar nou indica spre aceiasi valoare echo $prop3; ?> Copiati fisierul in directorul htdocs al serverului de Web si incarcati adresa http://localhost/a2221.php
Cap 2.2.3. Tema 2.b
A) Efectuati cele doua activitati prezentate pe parcursul acestui capitol. B) Creati un formular HTML in care se citesc numele, prenumele, anul de studiu si nota luata la un examen de un student. La apasarea butonului de Submit se va incarca o pagina PHP in care se va afisa sub forma de fraze situatia elevului, transformand nota in calificativ: promovat / nepromovat si apoi calculand bursa ca fiind 100000*nota daca nota este peste 7, respectiv 50000*(nota-1) daca este sub 7. Raspunsul la aceasta tema va consta in numele celor doua fisiere si observatiile referitoare la problemele intampinate.
Cap 3.1.1. Instructiuni conditionale
Instructiunile conditionale permit executia conditionata a secventelor de program. In lipsa unor astfel de instructiuni ar fi practic imposil de implementat o mare parte dintre problemele din luma reala. Cap 3.1.1.1. Instructiunea if Instructiunea if permite luarea de decizii privind executia unei alte instructiuni sau a unui bloc de instructiuni inclus intre acolade ('{' si '}'). Cea mai simpla sintaxa a instructiunii if este: if (expr) instructiune Expresia expr este o expresie (conditie) logica ce se evalueaza la true sau false. Daca evaluarea conditiei are ca rezultat o valoare adevarata se va executa instructiunea specificata, daca nu, instructiunea va fi ignorata si se va trece mai departe. Exemplu: if ($nota < 5) echo 'Examenul trebuie repetat!'; [email protected].
Daca expresia conditionala nu este una logica, se va face o conversie automata la o valoare logica. Valorile numerice 0 sau 0.0, sirurile vide (""), tablourile fara nici un element sau variabilele neinitializate vor fi evaluate la fals, restul fiind evaluate la true. Daca se doreste executia conditionala a mai mult de o instructiune se va utiliza costructia de bloc, ca in exemplul urmator: if ($nota < 5) { echo 'Examenul trebuie repetat!'; $bursa = 0; } In multe cazuri, pentru conditie neadevarata se doreste executia altei instructiuni sau a unu bloc de instructiuni. In acest caz se va folosi clauza optionala else. Exemplu: if ($nota < 5) { echo 'Examenul trebuie repetat!'; $bursa = 0; } else { echo 'Felicitari pentru trecerea examenului!'; $bursa = 1000000; } In unele situatii, la luarea unei decizii exista mai multe optiuni. In acest caz ar trebui testate mai multe conditii. Pentru aceasta, limbajul PHP pune la dispozitia programatorilor clauza elseif. In acest caz sintaxa instructiunii este: if (expr1) instructiune1 elseif (expr2) instructiune2 ... elseif (expr3) instructiune Exemplu: if ($nota < 5) { echo 'Insuficient'; $bursa = 0; } elseif ($nota<7) { echo 'Suficient'; $bursa = 500000; } elseif ($nota<9) { echo 'Bine'; $bursa = 1000000; } else { [email protected].
}
echo 'Bine'; $bursa = 1500000;
Cap 3.1.1.2. Instructiunea switch Instructiunea switch este similara cu o serie de instructiuni if care testeaza mai multe valori posibile pentru o anumita expresie. Avantajul sau este o scriere mai concisa si mai simplu de inteles si depanat. Sintaxa acestei instructiuni este: switch (expr) { case valoare_1: instructiune_1; break; case valoare_2: instructiune_2; break; ... case valoare_n: instructiune_n; break; defaut: instructiune_default; } Dupa evaluarea expresiei, valoarea obtinuta este comparata cu valorile din clauzele case. Daca se intalneste o potrivire se va continua cu executia instructiunilor din clauzele case urmatoare, pana la intalnirea instructiunii break. Consecinta este ca, daca instructiunile dintr-o clauza case nu se termina cu break, se va continua executia cu instructiunile clazei urmatoare. Acest lucru se poate utiliza pentru a executa o secventa de instructiuni comuna pentru mai multe valori, ca si in exemplu urmator: switch ($nota) { case 1: case 2: case 3: case 4: echo ' nu are bursa!'; break; case 5: case 6: echo ' bursa este 500000.'; break; case 7: echo ' bursa este 700000.'; break; case 8: case 9: echo ' bursa este 1000000.'; break; case 10: echo ' bursa este 1500000.'; break; defaut: echo 'nota nu este corecta!'; } Cap 3.1.2. Instructiuni repetitive
Instructiunile repetitive permit implementarea algoritmilor care necesita repetarea unei secvente de calcul.
[email protected].
Cap 3.1.2.1. Instructiunea while Instructiunea while se foloseste pentru a implementa o bucla repetitiva cu test initial. Ea permite executia unei instructiuni sau a unui bloc de instructiuni inclus intre acolade ('{' si '}') si are sintaxa: while (expr) instructiune Expresia expr este o expresie (conditie) logica ce se evalueaza inainte de fiecare repetitie. Daca rezultatul evaluarii conditiei este adevarat, se va executa instructiunea specificata apoi secventa se va relua. Daca rezultatul evaluarii este fals, instructiunea va fi ignorata si se va trece la intructiunea de dupa while. Exemplu: $i = 1; while ($i< 5) echo 'Numarul '.$i++."
"; In cazul in care conditia este neadevarata de la inceput, instructiunea din bucla nu se va executa de loc. Creati fisierul a3121.php pentru a genera o tabela de conversie valutara.
"; while ($n<=5000) { Activitate 1 echo "
"; echo $n; echo " | "; $factorial *= $n; echo $factorial; echo " |
"; // se creaza coloana pentru valoarea indexului echo $indice; // se completeaza valoarea indexului echo " | "; // se creaza coloana pentru culori echo $culoare; // se completeaza culoarea echo " |
Tablou asociativ, extragere valori.
"; echo "
Tablou asociativ, extragere valori si chei.
"; echo "
"; // se creaza coloana pentru valoarea cheii (produsul) echo $produs; // se completeaza valoarea cheii echo " | "; // se creaza coloana pentru pret echo $pret_produs; // se completeaza pretul echo " |