Sunteți pe pagina 1din 13

LIMBAJUL PHP

Ce este PHP?
PHP este un limbaj de script care funcioneaz alturi de un server Web. PHP este un limbaj destinat scrierii scripturilor care vor fi interpretate de server-ul Web. Limbajul face parte din categoria open source , gratuite si este remarcabil prin flexibilitate uurina in nvare si capacitatea de a rula pe multiple sisteme de operare (Windows, Unix, Linux). Limbajului PHP combinat cu serverul de baza de date MySOL reprezint o soluie foarte bun pentru realizarea rapida de aplicaii Web complexe. Deoarece PHP a fost conceput ca limbaj de scripting pentru Web, faciliteaz accesul la variabile transmise de ctre formularele HTML. Este de notat diferena cu alte limbaje script CGI scrise n limbaje precum Perl sau C: n loc de a scrie un program cu o multitudine de linii de comanda afiate n final ntr-o pagin HTML, vei scrie o pagin HTML cu codul inclus pentru a realiza o aciune precis (n cazul nostru se va afia un text). Codul PHP este inclus ntre tag-urile speciale de nceput i de sfrit care permit utilizatorului s treac din "modul HTML" n "modul PHP". Fa de alte limbaje script, precum Javascript, la PHP codul se execut pe server. Dac pe serverul Web se afl un script similar, clientul nu va primi dect rezultatul execuiei scriptului, fr a avea nici o posibilitate de acces la codul care a produs rezultatul. V putei configura serverul de Web s prelucreze (analizeze) toate fiierele HTML ca fiiere PHP. Astfel nu exist nici un mijloc de a distinge paginile care sunt produse dinamic de paginile statice. Marea calitate i cel mai mare avantaj al limbajului PHP este suportul cu un numr mare de baze de date. A realiza o pagin web dinamic cu o baza de date este extrem de simplu. Dintre cele n jur de 20 de tipuri de baze de date care sunt suportate de ctre PHP, cele mai importante sunt: MySQL, Oracle, dBase si Unix dbm. Limbajul PHP are de asemenea suport pentru diverse servicii server utiliznd protocoale precum IMAP, SNMP, NNTP, POP3 i HTTP.

Instalarea PHP
Dup cum am spus mai sus, limbajul PHP poate fi folosit pe foarte multe sisteme de operare: toate sistemele Windows, Unix si Linux.

Ne vom opri asupra sistemelor de operare Windows. Este de preferat folosirea pachetului PHPTriad (care are mai multe variante, eu folosind 2.2.1) deoarece conine serverul Apache, limbajul PHP 4 si serverul de baze de date MySQL. Instalarea acestui pachet se face la fel ca orice program pentru Windows i creeaz pe C: un director Apache care conine cele trei pri din pachet. Implicit documentele PHP se vor afla in directorul htdocs, iar bazele de date n directorul data din directorul mysql. Pentru a putea lansa documentele web care folosesc limbajul PHP trebuie s lansm mai nti serverul Apache din meniul Programs al Windows. De asemenea pentru a folosi MySQL trebuie pornit n mod asemntor serverul MySQL. Documentele aflate n directorul htdocs se vor accesa n bara de adresa a oricrui browser (Internet Explorer, Netscape sau altele) cu adresa: HTTP://localhost/... . n acest fel se precizeaz browserului s se adreseze serverului Apache.

Elementele de baz ale limbajului


Exist patru moduri pentru a trece de la HMTL la PHP:
<? ................. ?> <?php .................. ?> <script language="php"> ................ </script> <% .............. %> - n stil ASP

Cel mai folosit mod este primul pentru c este mai simplu, dar i al doilea pentru c asigura compatibilitatea cu limbajul XHTML. Instruciunile sunt separate, ca n C sau ca n Perl, prin punct i virgul la sfritul unei instruciuni. Semnele de sfrit, '?>', implic sfritul instruciunii, deci implicit punct i virgul. Exemplu:
<? print TEST; ?>

Comentariile pot fi fcute n stilul celor din limbajele C sau C++, adic cu //... sau /*...*/

Tipurile de date din PHP


3

Tipurile de date folosite de PHP sunt: ntregi, reale, iruri de caractere, tablouri, dar permite i definirea i folosirea obiectelor. Spre deosebire de C, C++ sau Pascal, n PHP variabilele nu trebuie declarate si precizat tipul lor. Tipul va fi determinat la prima atribuire. Toate variabilele au numele precedat de caracterul $. Valorile ntregi se pot scrie n baza 10, baza 8 (precedat de 0) sau n baza 16 (precedat de 0x). Exemple:
$a=122; $b=0345; $c=0x3AD1;

Numerele reale se pot scrie n forma normal sau n forma exponenial: Exemple: 12.345 sau 1.456e2. irurile de caractere pot fi delimitate de ghilimele sau apostrofuri, n ultimul caz inhibnduse evaluarea variabilelor din interiorul irului. Dac irul de caractere este delimitat de ghilimele atunci variabilele din interiorul irului vor fi evaluate i nlocuite prin valoarea lor. Ca i n C sau Perl, caracterul backslash (\) este utilizat pentru a proteja un caracter special. Exemplu: Secvene escape \n \r \t \\ \$ \" Valoare Linie nou (linefeed, LF sau 0x0A in ASCII) ntoarcere la linie (carrige return, CR sau OxOD in ASCII) Tab orizontal (HT sau 0x09 in ASCII) Backslash Semnul dolarului Ghilimele

A doua metod ncadreaz irurile ntre apostrofuri; n acest caz singurele secvene escape nelese sunt '\\' i '\'. Variabilele nu vor fi expandate ntr-un ir ncadrat ntre apostrofuri. O alt metod de a delimita irurile este folosirea sintaxei doc '<<<'. Dup acest delimitator trebuie specificat un identificator, apoi irul de caractere propriu-zis i, n ncheiere, acelai identificator care a precedat irul.

irurile de caractere au o mare importan deoarece prin intermediul lor se transmit comenzi serverelor de date, de exemplu comenzile SQL care se transmit serverului MySQL. n PHP tablourile se comport i ca tablouri asociative (hash tables) i ca tablouri indexate (vectori). PHP accept att tablouri scalare ct i asociative. De fapt nu exist nici o diferen ntre cele dou. n PHP tablourile se pot crea utiliznd funciile list() i array() sau se poate seta explicit fiecare element din tablou. Exemplu:
$a[0]=23; $a[1]=0; $b[3]=adssd; $s[a]=3;

Se poate de asemenea crea un tablou adugndu-i valori. De exemplu, putem extinde tabloul $a ca n exemplul de mai jos
$a[] = "Ana"; $a[] = "Maria";

Vectorii pot fi sortai utiliznd funcii specializate: asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), i uksort(). Putem numra elementele tabloului utiliznd funcia count(). Putem parcurge un tablou utiliznd funciile next(), prev() i each(). Dup cum am mai spus, PHP nu accept definirea explicit a tipului n definirea variabilelor, tipul unei variabile fiind determinat de contextul n care acea variabil este utilizat. Acesta nseamn c dac atribuii variabilei var un ir de caractere, var va deveni ir. Dac i atribuii o valoare ntreag, var va deveni un ntreg. Un exemplu de conversie automat a tipului apare la utilizarea operatorului '+'. Dac vre-un operand este double, atunci toi operanzii sunt evaluai la double, i rezultatul va fi un double. Altfel, operanzii vor fi interpretai ca ntregi i rezultatul va fi tot un ntreg. Reinei c acest mod de evaluare nu modific tipul operanzilor care intervin n expresie, ci numai modul n care ei sunt evaluai, asemntor cu conversia implicit din C sau C++.

Variabile PHP
Variabilele n PHP sunt reprezentate de semnul dolar, '$', n faa numelui variabilei. Numele variabilelor sunt formate dup aceleai reguli ca alte etichete din PHP. Un nume de variabil valid trebuie s nceap printr-o liter sau liniu de subliniere, ' _', urmat de un ir de litere, cifre sau liniue de subliniere.

n PHP 3, variabilele sunt asignate ntotdeauna prin valoare. Astfel, cnd atribuim unei variabile o expresie, ntreaga valoare a expresiei este copiat n variabila destinaie. Aceasta nseamn, de exemplu, c atribuind unei variabile valoarea altei variabile, modificarea unei variabile nu va avea efect asupra celeilalte. PHP 4 ofer i un alt mod pentru atribuirea de valori variabilelor: prin referin. Aceasta nseamn c noua variabil nu face dect s refere variabila original (cu alte cuvinte, "devine un alias pentru" sau "pointeaz la" variabila original). n acest caz, cele dou variabile sunt interdependente, modificarea uneia determinnd modificarea celeilalte. Deoarece nu are loc copierea i actualizarea valorilor, asignarea prin referin este mai rapid. Diferena devine notabil n cazul execuiilor repetate sau la asignarea tablourilor mari, respectiv a obiectelor. Pentru a atribui prin referin, se introduce un caracter ' &' n faa variabilei care este atribuit (variabila surs). Exemplu:
$a=Ana; $b=&$a; $t = "Numele meu este $b"; Print $t; // afiseaza Numele meu este Ana

Observaie: Numai variabilele pot fi asignate prin referin (nu i valorile constante). Observaie: Atunci cnd folosim instruciune include variabilele declarate anterior pot fi folosite n fiierul inclus deoarece aceast instruciune se comport ca o copiere n textul final al documentului web.

Constante PHP
Constante predefinite: PHP_VERSION - Un ir de caractere reprezentnd versiunea PHP utilizat; PHP_OS - Numele sistemului de operare n care ruleaz PHP; TRUE - O valoare adevrat; FALSE - O valoare fals; E_ERROR - Indic o eroare, alta dect o eroare de analizare, pentru care corectarea nu este posibil; E_WARNING - Indic o situaie n care PHP tie c ceva este greit, dar continu oricum; E_PARSE - Semnaleaz o sintax invalid n fiierul script; corectarea nu este posibil; De asemenea putem defini constante folosind funcia define(): Exemplu: define( "nume", "Anamaria."); 6

Print nume;

Expresii i operanzi
Expresiile sunt cele mai importante construcii ale PHP; n PHP aproape orice scriei este o expresie. Expresia este o construcie algoritmic ce are un rezultat. PHP este un limbaj orientat pe expresii n sensul c aproape orice este o expresie. Operatorii de pre i postincrementare funcioneaz analog cu cei din C. Un tip uzual de expresii l reprezint expresiile de comparare. Aceste expresii sunt evaluate la 0 sau 1 reprezentnd FALSE, respectiv TRUE. PHP accept operatorii de comparaie >, >=, ==, != (diferit), <, <=. Aceste expresii sunt utilizate uzual n construirea condiiilor. Ca i n C se pot folosi operatorii de atribuire compui. n afar de faptul c utilizarea acestor operatori compui duce la scurtarea codului, i execuia este mai rapid. De asemeni, PHP accept operatorul ternar condiional ' ?', cu aceeai semnificaie ca i n C. Limbajul PHP nu dispune de un tip logic predefinit. Evaluarea valorii de adevr a expresiilor PHP se face la fel ca n C i Perl: orice valoare numeric nenul este TRUE, zero este FALSE. Un ir vid este FALSE, orice alt ir este TRUE. n cazul tablourilor i obiectelor orice valoare care nu conine elemente este considerat FALSE, altfel este considerat TRUE. Exemple:
$c = $a++; $f = double( $d++); $b = $a = 5;

Operatorii PHP sunt de urmtoarele tipuri: aritmetici, de atribuire, pe bii, de comparaie, de incrementare/decrementare, logici i operatori pe iruri de caractere. Toi operatorii din PHP sunt mprumutai din C i C++ i se comporta la fel ca n aceste limbaje, avnd aceeai prioritate. Excepie fac operatorii pe iruri de caractere. Exist doi operatori pentru iruri de caractere. Primul este operatorul de concatenare (' .'), care are ca rezultat concatenarea celor dou argumente. Cel de-al doilea operator este operatorul de atribuire ('.='), care concateneaz argumentul din partea dreapt la argumentul din stng.

Structuri de control
Principalele structuri de control din PHP sunt i ele preluate din C i C++, unele avnd i alte variante i modificri. Acestea sunt: if, while, do-while, for, foreach, break, continue si switch.

Instruciunea if permite execuia condiionat a unei pri de cod. Sintaxa instruciunii if este aceeai ca i n C:
if(expresie) { instructiuni }

Daca expresia (condiie) are valoare adevrat se executa instruciunile, altfel nu se face nimic. O a doua forma este cea cu else, la fel ca in C:
if(expresie) { instructiuni } else { instructiuni }

caz n care daca expresia nu este adevrat se vor executa instruciunile de dup else. Dac avem o singur instruciune de executat atunci nu mai sunt necesare parantezele acolade. Instruciunile while , do-while si for permit executarea repetat unui grup de instruciuni astfel: while executa ct timp expresia e adevrat, dar condiioneaz anterior, do-while la fel, dar condiioneaz posterior, iar for permite execuia repetat bazat pe incrementare/decrementare. Ele au urmtoarele forme:
while( expresie) { instructiuni } do { } while(expresie);

i respectiv
for( expr1; expr2; expr3) { instructiuni }

Prima expresie (expr1) este evaluat (executat) o singur dat, necondiionat, la nceputul buclei. La nceputul fiecrei iteraii, expresia expr2 este evaluat. Dac evaluarea devine TRUE, bucla continu i instruciunile din lista de instruciuni sunt executate. Dac evaluarea devine FALSE, execuia buclei se oprete. La sfritul fiecrei iteraii, expresia expr3 este evaluat (executat). Expresiile pot fi eventual vide. Dac expresia expr2 este vid, nseamn c bucla este infinit (PHP consider implicit c expresia expr2 este TRUE, ca n C). Acest lucru poate fi util, mai ales cnd dorim s terminm bucla cu instruciunea break. PHP4 (nu i PHP3) dispune de comanda foreach, ca Perl sau alte limbaje. Instruciunea ofer un mod simplu de a trece n revist un tablou. Exist dou sintaxe posibile, a doua este o mic, dar util, extensie a celei dinti :
foreach( array_expresion as $value) { instructiuni }

sau
foreach( array_expresion as $key => $value) { instructiuni }

Prima form trece n revist tabloul array_expression. La fiecare iteraie, valoarea elementului curent este atribuit lui $value i pointerul intern al tabloului este avansat cu un element (astfel, la urmtoarea iteraie avei acces la urmtorul element). A doua form face acelai lucru, dar cheia (indicele) elementului curent va fi atribuit variabilei $key la fiecare iteraie. Observaie: cnd foreach ncepe s fie executat, pointerul intern al fiierului este automat repoziionat la primul element al tabloului. Acest lucru nseamn c nu vei avea nevoie s facei apel la reset() nainte de foreach. De asemeni, foreach lucreaz cu o copie a tabloului astfel nct pointer-ul intern al tabloului nu este modificat ca n cazul utilizrii constructorului each. Instruciunea break permite ieirea dintr-o instruciune if, for, while sau switch. Instruciunea break accept un argument numeric opional care va indica numrul de instruciuni imbricate care trebuiesc ntrerupte. Instruciunea continue este utilizat ntr-o bucl pentru a sri peste instruciunile de dup continue i pn la sfritul blocului; execuia iteraiei curente este ntrerup i se trece la execuia iteraiei urmtoare. Instruciunea continue accept un argument numeric opional care va indica cte bucle imbricate vor fi ignorate. 9

Instruciunea switch este echivalent cu o serie de instruciuni if. Cu numeroase ocazii, vei avea nevoie s comparai aceeai variabil (sau expresie) cu mai multe valori diferite i s executai diferite pari din cod n funcie de valoarea obinut. Acesta este modul de execuie al instruciunii switch. Este important s nelegem modul de execuie al instruciunii switch pentru a evita apariia erorilor. Instruciunea switch se execut secvenial, linie dup linie. La nceput nu este executat nici un cod. Numai cnd se gsete o valoare a selectorului identic cu o constant case, PHP execut instruciunile corespunztoare respectivei constante case. PHP continu s execute instruciunile pn la sfritul blocului de instruciuni switch sau pn cnd ntlnete instruciunea break. Dac nu utilizai instruciunea break la sfritul unui bloc case, PHP va continua s execute instruciunile din urmtorul bloc case. Exemplu:
switch( $i) { case 0: print "$i este egal cu 0"; case 1: print "$i este egal cu 1"; case 2: print "$i este egal cu 2"; }

n comanda switch, condiia este evaluat o singur dat i rezultatul este comparat cu fiecare constant case. ntr-o instruciune elseif, condiia este reevaluat. Dac condiia voastr este mai complicat dect o simpl comparaie sau apare ntr-o bucl, instruciunea switch se poate dovedi mai rapid. Un caz special l constituie expresia predefinit default. Aceast expresie indic orice expresie diferit de constantele case anterioare Exemplu:
switch( $i) { case 0: print "$i este egal cu 0"; break; case 1: print "$i este egal cu 1"; break; case 2:

10

print "$i este egal cu 2"; break; default: print "$i nu este egal cu 0, 1 sau 2"; }

PHP propune o sintaxa alternativ pentru instruciunile de control if, while, for i switch. n fiecare caz principiul este de a nlocui acolada deschis cu dou puncte (' :') i acolada nchis prin, respectiv endif;, endwhile;, endfor;, sau endswitch;. Funcii Limbajul PHP dispune de un numr impresionant de funcii predefinite, grupate pe mai multe categorii: funcii matematice, funcii de lucru cu iruri de caractere, funcii de lucru cu fiiere, funcii sistem, etc. Funcia include() introduce i evalueaz fiierul specificat n argument. Dac URL fopen wrappers nu sunt disponibile n PHP (aa cum sunt n configuraia implicit), putei specifica fiierul care trebuie inclus utiliznd un URL n locul unui pathname local. Pentru a evita utilizarea eronat a fiierului inclus, orice cod din fiierul destinaie care trebuie executat ca un cod PHP trebuie ncadrat de tag-uri de nceput i sfrit valide n PHP. Observaie: Funcia include() este reevaluat de fiecare dat cnd este ntlnit ntr-un cod PHP. Deoarece include() este o construcie special a limbajului, trebuie s o includei ntr-un bloc de instruciuni dac ea apare ntr-un bloc condiional. Aceast funcie este foarte util pentru reutilizarea codului i pentru structurarea paginilor web. De asemenea este folosit pentru a scrie funcii PHP n afara paginilor. n PHP4, ct i n PHP3, se poate executa o instruciune return n interiorul unui fiier inclus cu include(), execuia determinnd ncheierea procesului n respectivul fiier i revenirea n scriptul care l-a solicitat. De asemeni, PHP4 permite s returnai valori din fiierele incluse cu include(). Putei folosi aceste valori ca i cum ar fi returnate de o funcie normal. O mare importan o au funciile definire de programator. Asemenea majoritii limbajelor de programare moderne, i PHP permite definirea i folosirea acestor funcii. O funcie poate fi definit de utilizator conform sintaxei urmtoare:
function nume_functie( $p1, $p2, ..., $pN) { return $rey; }

11

ntr-o funcie poate s apar orice cod PHP valid, chiar alte funcii i definiii de clase. Informaiile pot fi transmise funciilor printr-o list de parametri. n aceast list variabilele i/sau constantele sunt delimitate prin virgul. PHP accept transmiterea parametrilor prin valoare (implicit), prin referin i argumente cu valori implicite. Listele cu numr variabil de parametri sunt acceptate doar n versiunea PHP4. Un efect similar poate fi obinut n PHP3 transmind funciei un tablou de argumente. Implicit, argumentele funciilor sunt transmise prin valoare (n sensul c schimbarea valorii argumentului n interiorul funciei nu se reflect i n afara funciei). Dac dorii s permitei unei funcii s modifice argumentele sale, acestea trebuie transmise prin referin. Dac vrei ca un argument al unei funcii s fie transmis prin referin, trebuie s precedai cu un ' &' numele argumentului n definiia funciei, exact ca in C sau C++. Valorile sunt returnate folosind opional instruciunea return. Poate fi returnat orice tip de rezultat, inclusiv tablouri i obiecte. Exemplu:
function patrat( $n) { return $n * $n; } print patrat(4); // va afia 16

Nu putei returna valori multiple dintr-o funcie, dar rezultate asemntoare pot fi obinute prin returnarea unui tablou.

PHP, MySQL i formularele


Lucrul cu formulare pe Internet este o practic foarte comun. Limbajul PHP permite foarte simplu prelucrarea datelor venite dintr-un formular. Exemplu:
<html> <head><title> formular simplu</title></head> <body> <FORM METHOD=POST ACTION=PHPACT.PHP> <br>tastati date: <br><INPUT TYPE=TEXT NAME=date> <br><br><INPUT TYPE=SUBMIT> </FORM> </body>

12

</html>

Accesarea variabilelor primite de la browser Odata ce datele dintr-un formular au fost expediate , scriptul asociat primete un ir de caractere care conin perechi de valori nume=valoare Separate prin caractere &. Intr-un script PHP, numele diferitelor campuri $nume devin automat variabile globale in cadrul scriptului si au valorile din cmpurile formularului. Aceasta este valabil indiferent de modul de trimitere (post sau get). Valorile primite de la browser pot fi accesate si prin irurile asociative $HTTP_POST_VARS sau $HTTP_GET_VARS, in funcie de modul de expediere a datelor. Accesul la o valoare se face scriind $HTTP_POST_VARS[cheie], cheie fiind numele cmpului formularului. Multe dintre aceste formulare se refer la pstrarea anumitor date. Aici intervine MySQL i PHP permite transmiterea de comenzi ctre serverul de date MySQL. Aadar, PHP este suficient pentru prelucrarea formularelor i a bazelor de date, ntr-un mod simplu i eficient.

13

14