Sunteți pe pagina 1din 20

BD - Baze de date

7. Limbajul PHP 7.1. Dezvoltarea de aplicatii pentru mediul Web 7.2. Arhitectura client-server 7.3. Instalarea si configurarea serverului Web Apache 7.4. Limbajul PHP 7.5. Comentarii. Identificatori. Variabile 7.6. Tipuri de date 7.7. Operatori

7.1. Dezvoltarea de aplicatii pentru mediul Web Internetul permite interactiunea si schimbul de informatie dintre utilizatori, prin intermediul componentelor sale (web, ftp, email, telnet, etc.). In momentul de fata, cel mai utilizat serviciu Internet este Web-ul, cunoscut si sub denumirea de World Wide Web (www). Web-ul este o colectie de fisiere scrise in HTML sau alte limbaje de marcare similare (Markup Language), care pot fi accesate de catre utilizatori prin intermediu clientilor Web. Clientii Web reprezinta aplicatii software care permit vizualizarea, examinarea si comunicarea cu documente Web, fiind de fapt interfete intre utilizatori si retea. O lista a celor mai utilizati clienti Web, realizata de NetApplications, prezinta urmatoarea structura pentru anul 2008:
Data 2008 Q4 2008 Q3 2008 Q2 2008 Q1 IE 70.53% 72.22% 73.81% 75.06% Netscape 0.49% 0.68% 0.62% 0.62% Mozilla 0.09% 0.09% 0.11% 0.33% Firefox 20.35% 19.48% 18.43% 17.35% Opera 0.73% 0.71% 0.71% 0.67% Safari 6.84% 6.39% 6.14% 5.78% Chrome 0.78% 0.26% Sursa Q4 2008 Q3 2008 Q2 2008 Q1 2008

Aplicatiile reprezinta programe sau grupuri de programe create pentru a fi folosite de catre utilizatori in realizarea unor anumite sarcini. Daca utilizatorul final acceseaza aceste aplicatii prin intermediul unui client Web (browser Web) atunci vorbim despre aplicatii Web. Aplicatiile Web dinamice reprezinta in general site-uri Web complexe, interactive, care utilizeaza facilitatile oferite de limbajele de programare Web server-side (PHP, ASP, JSP, ColdFusion, Perl, Python) si de bazele de date (MySQL, MsSQL, PostgreSQL). Cele mai cunoscute aplicatii Web dinamice sunt: portalurile Web (http://www.rol.ro), magazinele virtuale (http://www.emag.ro), forum-urile (http://forum.softpedia.com), wiki-urile (http://www.wikipedia.org) blog-urile (http://www.procata.com/blog). Dezvoltarea aplicatiilor Web dinamice necesita utilizarea urmatoarelor tehnologii: server Web permite stocarea si livrarea aplicatiilor Web; server de baze de date permite stocarea informatiei dintr-o aplicatie Web; limbaj de programare pentru Web

permite scrierea programelor care ofera continutul dinamic intr-o aplicatie Web.

7.2. Arhitectura client-server Internetul s-a dezvoltat avand la baza arhitectua client-server. Intr-o arhitectura de tip client-server un calculator ruleaza aplicatii software, denumite clienti, care interactioneaza cu alte aplicatii software, denumite servere, ce sunt localizate pe un alt calculator. Clientul trimite o cerere catre un server pentru a primi un raspuns. Acest proces se desfasoara dupa cum urmeaza: clientul initiaza o cerere catre server, asteapa un raspuns de la server, primeste raspunsul de la server si returneaza raspunsul utilizatorului intr-un anumit format. Server-ul nu actioneaza decat in cazul in care sunt primite cereri de la clienti si transmite date doar daca sunt respectate anumite reguli. Pe baza cererii realizate de client, server-ul va analiza si va rspunde acestuia. Se mai poate spune c serverul ofera servicii clientilor din retea, sau ca server-ul produce resurse, iar clientul consuma aceste resurse. Server-ul raspunde cererilor facute de fiecare statie client pentru informatii si resurse, realizand concomitent atat controlul distributiei informatiei, cat si managementul optimizat al proceselor. Printre elementele care stau la baza arhitecturii client-server pot fi amintite: delimitarea neta dintre serviciile de prezentare si cele de manipulare a informatiilor si flexibilitatea in ceea ce priveste dezvoltarile ulterioare implementarii. In cazul aplicatiilor Web, clientul este reprezentat de un browser Web (Mozilla Firefox, Internet Explorer, Safari, Opera, Google Chrome). Acesta interactioneaza cu server-ul Web prin intermediul unui set de instructiuni numite protocoale. Protocolul de baza pentru Web este HTTP - HyperText Transport Protocol. Protocoalele ajuta la transferul datelor prin cereri realizate de catre client si raspunsuri furnizate de catre server. Un server Web va furniza clientului codul HTML al paginii Web cerute. Aplicatiile Web dinamice discutate in acest curs presupun existenta unei arhitecturi formate din: browser Web, Internet, server Web Apache, server de baze de date MySQL, interpretor PHP.

Fig.1 Arhitectura client-server

Din momentul in care utilizatorul acceseaza o pagina Web dinamica (.php), si pana in momentul in care rezultatul este returnat inapoi la utilizator, au loc urmatoarele operatii: prin intermediul unui browser Web, se transmite o cerere HTTP catre server-ul Web; server-ul Web primeste cererea, cauta fisierul corespunzator si il plaseaza interpretorului PHP;

daca, in timpul procesarii, interpretorul PHP gaseste o comanda de conectare la un server de baza de date, atunci este deschisa o conexiune la server-ul MySQL; server-ul de baza de date primeste o interogare, o proceseaza si transmite rezultatul interpretorului PHP; dupa interpretare va rezulta o pagina ce contine cod HTML (si eventual JavaScript) ce este returnata server-ului Web; server-ul Web trimite catre browser-ul utilizatorului codul HTML. Procesul de transfer a fisierelor de la server la client poarta denumirea de download, in timp ce procesul invers, ce permite transferul fisierelor de la client la server, poarta denumirea de upload.

7.3. Instalarea si configurarea serverului Web Apache Combinatia Apache-MySQL-PHP (AMP) nu este numai una gratuita, ci si cea mai folosita in prezent pe Web, deoarece este extrem de bine documentata si beneficiaza de un suport performant. Principalele avantaje ale utilizarii structurilor de tipul AMP (Apache-MySQL-PHP) pentru dezvoltarea aplicatiilor Web dinamice rezida din faptul ca Apache, MySQL si PHP sunt exponenti de seama ai miscarii Open Source: aceste componente software sunt gratuite; codul sursa corespunzator acestor programe este public; membrii comunitatii participa la imbunatatirea si testarea lor; aceste pachete software sunt independente de platforma; pot rula la fel de bine pe sisteme de operare de tip Linux, Solaris, Windows, Mac OS sau altele. Pentru cursul de Baze de date au fost utilizate urmatoarele versiuni ale componentelor unei structuri AMP: Apache Web Server 2.2.15; MySQL 5.1.45; PHP 5.2.13. Server-ul Web este reprezentat de calculatorul si pachetul software, care asigura un tip special de servicii clientilor Web ce ruleaza pe alte calculatoare. Prin intermediul unui server Web se poate realiza administrarea si distributia aplicatiilor Web, care pot fi accesate de pe orice calculator conectat la Internet. Un raport realizat de compania Netcraft, in noiembrie 2008, ofera urmatoarele date cu privire la utilizarea server-elor Web pentru publicarea aplicatiilor Web:
Produs Producator Site-uri Web

Apache IIS GWS lighttpd nginx Altele

Apache Microsoft Google lighttpd nginx -

92,800,595 63,858,938 10,992,548 3,030,958 3,023,369 11,439,101 185,145,509

50.12 % 34.49 % 5.94 % 1.64 % 1.63 % 6.18 % 100 %

Serverul Web Apache este unul din cele trei ingrediente ale celui mai utilizat ansamblu din dotarea server-elor din Internet. Printre facilitatile oferite de serverul Apache pot fi amintite urmatoarele: consum mic de resurse; ruleaza pe diferite platforme; modul de rescriere a url-urilor (mod_rewrite) permite optimizarea aplicatiilor Web pentru motoarele de cautare; module suport pentru limbajele de programare Web server-side mod_perl, mod_php, mod_python; virtual hosts permite ca pe un server sa coexiste mai multe domenii; pagini de eroare personalizate; securitate sporita; configurare facila si rapida. Instalarea serverului Web Apache, pe sisteme de operare de tip Windows, este destul usor de realizat: se descarca kit-ul de la adresa http://httpd.apache.org; se executa programul de instalare. Daca serverul este instalat local, atunci in timpul instalarii campurile Network Domain si Server Name pot lua valoarea localhost. Deasemenea, programul de instalare ofera posibilitatea de a instala serverul Web Apache ca serviciu: for All Users, on port 80, as a Service -- Recommended. Daca procesul de instalare decurge fara erori, atunci in System Tray este adaugat un element corespunzator server-ului Web Apache. Testarea server-ului Web Apache se poate realiza prin intermediul unui client Web, specificand in bara de adrese numele calculatorului sau localhost (daca serverul ruleaza local).

Fig.2 Testarea server-ului Web Apache folosind clientul Web Mozilla Firefox

Dupa instalare, administrarea si configurarea unui server Web Apache presupune accesarea a doua directoare: conf contine fisierele ce permit configurarea serverului Web; configurarea unui server Apache se face prin editarea fisierului httpd.conf; dupa fiecare modificare a continutului acestui fisier trebuie repornit server-ul, pentru a fi luate in considerare ultimele modificari; htdocs reprezinta locatia in care vor fi depozitate aplicatiile Web. Configurarea modulului PHP pentru un server Apache Limbajele de programare pentru Web sunt utilizate pentru a oferi functionalitate paginilor Web dinamice. Astfel de limbaje de programare sunt specializate in dezvoltarea aplicatiilor Web. Limbajele de programare (scripting) pentru Web pot fi clasificate dupa cum urmeaza: server-side scripting permit dezvoltarea de scripturi care ruleaza direct pe server; din aceasta categorie fac parte limbajele PHP, ASP, JSP, ColdFusion, Perl, Python; client-side scripting permit dezvoltarea de scripturi care ruleza intr-un client Web; cele mai utilizate limbaje Web client-side sunt JavaScript si VBScript. PHP (PHP: Hypertext Preprocessor) este un limbaj de programare de tip script, interpretat, direct accesibil in cadrul documentelor HTML. Limbajul este disponibil gratuit pentru diverse platforme: UNIX (HP-UX, Solaris, OpenBSD), Linux, Microsoft Windows, Mac OS X, RISC OS. A fost introdus de Rasmus Lerdorf in anul 1994 sub denumirea de Personal Home Page, cu scopul de a inlocui solutii traditionale la acea vreme. In anul 1998, odata cu versiunea 3, denumirea este schimbata in PHP: Hypertext Preprocessor. In aceasta perioada s-au alaturat proiectului programatorii Andi Gutmans si Zeev Suraski. Versiunea 4 a fost lansata in anul 2000, fiind sustinuta timp de opt ani de echipa de specialisti de la PHP. Din anul 2004 a fost intr odusa versiunea 5 PHP, care a devenit singura versiune stabila in curs de dezvoltare. Aceasta versiune ofera facilitati extinse in ceea ce priveste programarea orientata pe obiecte. In momentul de fata este in dezvoltare versiunea 6 PHP. Utilizarea PHP ca si modul al unui server Web Apache, pe un sistem de operare de tip Windows, presupune instalarea (copierea) unei distributii PHP, pe sistemul care gazduieste serverul Web, si configurarea server-ului Web si a modulului PHP. Instalarea si configurarea distributiei PHP se desfasoara astfel: se descarca arhiva corespunzatoare (PHP Zip Package) de la adresa http://www.php.net/ downloads.php; se creaza un director cu denumirea php (C:\php\) si se copiaza continului arhivei in acest director; fisierul php.ini-recomended se copiaza in C:\Windows\ si se redenumeste php.ini; acesta este fisierul de configurarea al modulului PHP; se stabileste calea catre root-ul server-ului Web, prin editarea liniei doc_root din fisierul php.ini; se adauga urmatoarele doua randuri in fisierul httpd.conf;
LoadModule php5_module "C:/php/php5apache2_2.dll" AddType application/x-httpd-php .php

se reporneste serverul.

Daca instalarea si configurarea modulului PHP, pentru serverul Web Apache, s-a realizat cu succes, este de ajuns sa creati un fisier cu extensia .php, de exemplu test.php, in directorul htdocs si sa scrieti urmatorul script in acest fisier.

<?php phpinfo(); ?>

Testarea modulului PHP se poate realiza accesand intr-un client Web fisierul nou creat (http://localhost/ test.php). Functia phpinfo(), prezenta in scriptul de test, furnizeaza informatii despre instalarea si starea modulului PHP de pe server.

Fig.3 Testarea modulului PHP

Din momentul in care distributia PHP este disponibila pe server-ul Web, pot fi realizate si alte setari in functie de necesitatile aplicatiilor care vor utiliza modulul PHP. Setari ale modulului PHP disponibile in fisierul de configurare php.ini
Setare Descriere

short_open_tag asp_tags precision

Permite utlizarea tag-urilor scurte (<? si ?> in scripturi. Permite utlizarea tag-urilor de tip ASP (<% si %> in scripturi. Determina numarul de cifre care pot fi afisate pentru numerele reale. Implicit este 12 si ar trebuie sa fie suficient pentru majoritatea aplicatiilor. Stabileste limita de timp (in secunde) permisa la rularea unui script.

max_execution_time

max_input_time memory_limit

Stabileste limita de timp (in secunde) in care un script poate analiza datele. Stabileste limita de memorie (MB) care poate fi utilizata pentru rularea unui script.

error_reporting

Stabileste tipul erorile care urmeaza a fi afisate: E_ALL, E_ERROR, E_RECOVERABLE_ERROR, E_WARNING, E_PARSE, E_NOTICE, E_STRICT, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE. Stabileste daca erorile vor fi afisate. Este indicata utilizarea acestei setari cu valoarea "on" in faza de test sau dezvoltare a aplicatiei. Dupa finalizarea aplicatiei se recomanda utilizarea valorii "off". Permite scrierea erorilor intr-un fisier de tip log; este recomandata utilizarea valorii "on" pentru aceasta setare. Stabileste denumirea fisierului in care sunt scrise erorile PHP (error_log). Determin dac variabilele transmise prin formulare sunt disponibile la nivel global. Se recomanda valoarea implicita "off". Permite vizitatorilor site-ului Web sa incarce fisiere pe server, daca valoare utilizata pentru aceasta setare este "on". Stabileste limita (MB) pentru dimensiunea unui fisier care poate fi incarcat pe server. Determina daca poate fi stabilita o conexiune persistenta cu server-ul MySQL. Stabileste numarul de conexiuni persistente, permise cu un server MySQL. Stabileste numarul de conexiuni (persistente sau nepersistente) permise cu un server MySQL. Permite stabilirea unei locatii pentru salvarea sesiunilor (exemplu: C:\php\sess\tmp sau C:\tmp).

display_errors

log_errors

error_log register_globals

file_uploads

upload_max_filesize mysql.allow_persistent mysql.max_persistent mysql.max_links

session.save_path

Deasemenea, configurarea modulului PHP ofera control in ceea ce priveste modul de interactiune cu serverul de baza de date MySQL. MySQL este cel mai popular sistem de gestiune de baze de date, in reginm Open Source, destinat utilizarii cu PHP. Server-ul de baze de date MySQL este un sistem de gestiune de baze de date relational construit pe modelul client-server ce foloseste limbajul SQL. Pentru versiunea 5, suportul pentru baze de date MySQL nu mai este activat din start. Daca PHP este utilizat cu baze de date MySQL atunci trebuie copiat fisierul libmysql.dll din C:\php\ in C:\windows\system\ si configurat fiserul php.ini:
extension_dir = "C:\php\ext"

,dupa care este sters caracterul ; din urmatoarea linie:


extension=php_mysql.dll

De fiecare data cand fisierul php.ini este editat, este necesara repornirea server-ului Apache.

7.4. Limbajul PHP

Limbajul de programare PHP este un mediu flexibil, care a fost construit cu intentia de a oferi dezvoltatorilor, si nu numai, o modalitate cat mai simpla de a implementa aplicatii pentru Web. Sintaxa PHP are la baza mai multe limbaje de programare. In principal, sintaxa acestui limbaj se aseamna cu cele ale limbajelor C si Perl. Avand in vedere necesitatea de a de a oferi suport pentru programarea orientata pe obiecte si popularitatea limbajului Java, inca din versiunile anterioare, au fost adoptate influente specifice limbajului Java. Scripturile PHP pot fi scrise utilizand atat editoare de text uzuale (Notepad, WordPad, Emacs, Vim), cat si medii integrate de dezvoltare a aplicatiilor - IDE (ZendStudio, Eclipse, NetBeans). Spre deosebire de paginile Web uzuale (HTML), paginile Web care contin scripturi PHP detin, in general, extensia .php. Extensia specifica serverului faptul ca scripturile prezente in astfel de pagini necesita interpretare inainte de a trimite codul HTML rezultat la clientul Web. Scripturile PHP incluse in codul HTML sunt executate pe server, si in acest fel, incercarea de a vizualiza codul sursa al unei pagini Web dinamice va avea ca rezultat o lista de tag-uri HTML. Deoarece scripturile PHP sunt direct accesibile in paginile Web, fiecare sectiune a unui astfel de document poate fi interpretata ca fiind PHP sau HTML. Delimitarea sectiunilor de script PHP, intr-o pagina Web dinamica, poate fi realizata prin intermediul unor tag-uri speciale. In momentul de fata, sunt disponibile patru modalitati de a introduce scripturi PHP: stilul XML reprezinta modalitatea de baza (implicita) prin care pot fi introduse scripturi PHP;
<?php echo "Hello World!"; ?>

stilul scurt este disponibil doar prin intermediul directivei short_open_tag din fisierul de configurare php.ini;
<? echo "Hello World!"; ?>

stilul script este familiar celor care utilizeaza limbaje de genul JavaScript sau VBScript;
<script language="php"> echo "Hello World!"; </script>

stilul ASP a fost introdus incepand cu versiunea PHP3 si permite utilizarea tag-urilor din limbajul Active Server Pages pentru a delimita sectiunile de script; este disponibil doar prin intermediul directivei asp_tags din fisierul de configurare php.ini. <% echo "Hello World!"; %>

In PHP, o declaratie este reprezentata printr-o expresie urmata de punct si virgula (;). O secventa de declaratii valide, delimitata prin tag-uri PHP, constituie un program (script) PHP.

7.5. Comentarii. Identificatori. Variabile

Comentariile reprezinta parti din programe (scripturi), care au rolul de a explicita procesele executate sau de a preciza informatii aditionale cu privire la script: autor, scop, licenta, data ultimei modificari. Interpretorul PHP ignora comentariile, deci comentariile nu au nici un efect asupra scripturilor. In schimb, comentariile sunt folositoare pentru alti utilizatori, care vor avea acces la surse pentru a le modifica sau extinde. Limbajul PHP furnizeaza in mod curent trei modalitati de a adauga comentarii in scripturi, cu influente din limbajele C, C++, Perl, dar si din scripturile de tip shell. Stilul multilinie de comentare a surselor este asemanator cu cel utilizat in limbajul C. Acest stil presupune utilizarea perechilor de caractere /* si */ la incepul si la sfarsitul unui text explicativ sau a unei zone de script care se doreste a fi ignorata la interpretare.
<?php /* Autor: Marian Bucos Ultima modificare: 15.12.2008 Acest script afiseaza un mesaj. */ echo "Salutare natiune!"; ?>

In cazul in care se doreste introducerea unui comentariu doar pe o singura linie pot fi utilizate unul din urmatoarele stiluri: stilul C++;
<?php echo "Salutare natiune!"; //Acest script afiseaza un mesaj ?>

stilul shell script;


<?php echo "Salutare natiune!"; #Acest script afiseaza un mesaj ?>

Comentariile pe o singura linie sunt introduse prin intermediul unor constructii de tipul // sau # si se incheie cu final de linie sau final de script (tag-ul PHP ?>). Identificatorii sunt termeni care denota entitati dintr-un program. Exemple de identificatori sunt numele de functii, de variabile, de constante sau de clase. Pentru identificatori, in limbajul PHP, sunt valabile urmatoarele reguli: identificatorii pot avea orice lungime; identificatorii pot contine litere, numere, _ (underscore) sau caracterul $; identificatorii nu pot incepe cu o cifra; identificatorii sunt case sensitive (se face distinctie intre literele mari si literele mici); exceptie de la aceasta regula fac identificatorii utilizati pentru denumirea functiilor. Variabilele reprezinta modalitatea principala de stocare a informatiei in limbajul PHP. Variabilele sunt locatii de memorie desemnate printr-un identificator. Cele mai importante reguli cu privire la declararea si utilizarea variabilelor pot fi sintetizate astfel: identificatorii corespunzatori variabilelor sunt precedati de caracterul $; operatia de atribuire a unei valori pentru o variabila se realizeaza prin intermediul operatorului de atribuire (asignare) =; valoare unei variabile este data de ultima atribuire la care a participat variabila; tipul de data pentru o variabila nu este specificat explicit; tipul unei variabile este acelasi cu tipul valorii curente pentru variabila in cauza; variabilele pot fi declarate inainte de atribuire, dar acest lucru nu este obligatoriu. Spre deosebire de alte limbaje de programare, precum C, C++ sau Java, in limbajul PHP, nu este

necesara declararea explicita a unei variabile inainte de utilizare. O variabila este declarata in momentul in care ii este atribuita o valoare.
<?php $a = 10; $b = "Numele meu este Marian"; $c = 1.78; ?>

Acest lucru este posibil, deoarece in PHP un tip de data este asociat, in principal, unei valori. Scopul variabilelor se refera la domeniul de vizibilitate corespunzator acestora in interiorul unui program. In functie de scop, o variabila PHP poate fi incadrata in una din urmatoarele categorii: variabile locale variabile declarate in interiorul unei functii; pot fi referite doar in interiorul functiei in care sunt definite; parametrii de functie sunt declarati in lista de parametrii a unei functii, dupa denumirea acesteia; variabile globale sunt variabile care pot fi accesate in orice locatie a unui program; necesita prezenta cuvantului cheie global, inaintea variabilei, pentru a putea fi modificate in interiorul unei functii; variabile statice spre deosebire de parametrii unei functii, care sunt distrusi la inchiderea functiei, variabilele statice nu isi pierd valoarea; o variabila este declarata ca si variabila statica, daca este precedata de cuvantul cheie static.
<?php function track() { static $count = 0; $count++; echo $count; } track(); // 1 track(); // 2 track(); // 3 ?>

O alta modalitate de stocare a datelor, in limbajul PHP, este data de constante. Acestea nu pot stoca decat o singura valoare pe durata lor de viata. Constantele pot fi accesate din orice locatie a unui script, adica sunt globale, si nu pot contine decat tipuri de date scalare. Identificatorii utilizati pentru denumirea constantelor, la fel ca si in cazul variabilelor, sunt de tip case sensitive. Prin conventie, identificatorii care denumesc constante se scriu utilizand majuscule. Definirea unei constante se face prin intermediul functiei PHP define():
<?php define(PI, 3.1415); echo PI; ?>

In afara de constantele definite de utilizator, limbajul PHP pune la dispozitie un set de constante predefinite. Unele dintre acestea sunt definite doar pentru anumite extensii ale PHP si sunt disponibile doar daca extensiile au fost compilate in interiorul PHP sau daca au fost incarcate dinamic in timpul rularii. Exemple de constante predefinite in limbajul PHP
Nume Descriere

__FILE__ __FUNCTION__ __CLASS__ __METHOD__ PHP_VERSION PHP_OS E_ERROR E_WARNING E_PARSE E_NOTICE

Returneaza numele si calea fisirului curent. Returneaza numele functiei curente. Returneaza numele clasei curente. Returneaza numele metodei curente dintr-o clasa. Returneaza un sir de caractere reprezentand versiunea de PHP utilizata. Returneaza numele sistemului de operare care este instalat pe server. Indica o eroare, alta decat o eroare de analiza, pentru care corectarea nu este posibila. Indica o situatie in care PHP stie ca ceva este gresit, dar continua oricum. Indica o sintaxa invalida in scriptul rulat; corectarea nu este posibila. Indica o situatie care poate fi eroare sau nu; executia continua.

7.6. Tipuri de date PHP pune la dispozitie opt tipuri de date: patru tipuri scalare (boolean, integer, float si string), doua tipuri compuse (array si object) si doua tipuri speciale (resource si NULL). O data de tipul boolean poate avea doua valori posibile: TRUE si FALSE. Aceste valori nu sunt case sensitive (nu se face distinctie intre literele mari si literele mici). Daca se doreste conversia explicita a unei valori la tipul boolean, poate fi utilizat operatorul de cast (conversie) in una din variantele: (bool) sau (boolean). Pentru conversia la tipul boolean, urmatoarele valori sunt considerate FALSE: numarul intreg 0, numarul real 0.0, sirul vid, sirul "0", un tablou fara nici un element, un obiect fara nici o variabila membru, o variabila de tipul NULL, o variabila nedefinita. Dupa cum am precizat mai sus, in limbajul PHP, pot fi utilizate doua tipuri numerice: integer si float. Tipul integer permite lucrul cu valori intregi, care pot fi specificate in baza 10 (decimal), in baza 16 (hexadecimal) sau in baza 8 (octal). Pentru a utiliza un numar in baza 16 acesta trebuie precedat de 0X. Pentru a utiliza un numar in baza 8 acesta trebuie precedat de 0.
<?php $a = 123; //decimal $b = 0123; //octal $c = 0X123; //hexadecimal ?>

Pentru conversia la tipul integer pot fi utilizate urmatoarele doua variante: (int) sau (integer). Limbajul PHP permite reprezentarea numerelor reale prin intermediul tipului de date float. Pentru descrierea numerelor reale pot fi utilizate diferite sintaxe: 1.234; 1.2e3; 2E7; .123; 3E-6; -0.123. Tipul string ofera suport pentru reprezentarea sirurilor de caractere. In limbajul PHP, sirurile de caractere reprezinta colectii de date binare; un sir de caractere poate fi un text, continutul unui fisier imagine, o foaie de calcul tabelar sau o inregistrare video. Cea mai simpla metoda pentru a introduce un sir de

caractere este delimitarea acestuia prin ghilimele duble (") sau ghilimele simple (').
<?php $a = 'un sir de caractere'; $b = "un alt sir de caractere"; ?>

O variabila poate fi trecuta la tipul string folosind operatorul de conversie (string) sau functia strval(). Daca luam in calcul conversia tipurior de date catre tipul string, pot fi introduse urmatoarele situatii: o valoare boolean TRUE este convertita la sirulde caractere "1"; o valoare boolean FALSE este convertita la sirul vid ""; valorile numerice (de tip integer sau float) sunt convertite la siruri de caractere care reprezinta acele valori; valorile de tipul array sunt intotdeauna convertite la sirul de caractere "array"; valoarea NULL este convertita la sirul vid ""; valorile de tipul resource sunt intotdeauna convertite la siruri de caractere care au structura "Resource id #n", unde n reprezinta un numar unic atasat resursei respective de catre interpretorul PHP. In afara de tipurile de date scalare, limbajul PHP, ofera suport pentru doua tipuri compuse: array si object. Aceste tipuri de date reprezinta containere de alte tipuri de date indiferent daca ele sunt scalare sau compuse. Tipul de date array ofera cea mai flexibila metoda de stocare a datelor in PHP, prin utilizarea de colectii ordonate de elemente. Orice element are o cheie unica si o valoare. Tipul array foloseste chei sau indecsi pentru a identifica valorile stocate. Structurile definite prin intermediul tipului array, denumite si tablouri, pot fi utilizate ca stive, cozi, multimi, vectori uni, bi sau multi-dimenisonali. Tablourile sunt create prin doua metode: folosind constructia array() sau prin intermediul operatorului [].
<?php $a = array(1, 3, 7, 2); $b = array('ro'=>'salut', 'en'=>'hello', 'es'=>'hola'); $c = array(2=>1, 4=>2, 1=>3); $d[] = 100; $d['x'] = 101; ?>

Pentru o structura de tipul array pot fi definite diferite tipuri de operatii: vizualizare elemente; adaugare, modificare sau stergere element; stabilirea de chei pentru elementele structurii; sortarea elementelor intro anumita ordine stabilita printr-un criteriu de ordonare. Tipul object este utilizat in contextul programarii orientate pe obiecte pentru a defini structuri de date care incapsuleaza atat date (variabile), cat si cod (functii). Obiectele reprezinta instante ale claselor si sunt create folosind operatorul de instantiere new.
<?php class Student { protected $nume; protected $media; function Student($nume, $media) { $this->nume = $nume; $this->media = $media; } } $obj = new Student('Marian Bucos', 7.23); ?>

NULL este un tip de date special, care permite utilizarea unei singure valori, valoarea NULL. Acest tip de date este utilizat pentru a stabili lipsa unei valori pentru o variabila.

<?php $a = NULL; $b = null; ?>

O variabila poate fi considerata de tipul NULL daca: ii este atribuita constanta NULL; nu i-a fost inca stabilita o valoare; a fost distrusa prin utilizarea functiei unset(). Daca unei variabile i se atribuie valoarea NULL, atunci ea va avea urmatoarele proprietati: se evalueaza cu FALSE intr-un context logic; in cazul testarii cu isset() se returneaza valoarea FALSE. Cel de-al doilea tip special de date, in limbajul PHP, este resource, care permite pastrarea unei legaturi cu o referinta externa. Variabile de tipul resource pot fi create prin operatii speciale, precum: stabilirea unei conexiuni cu un server de baza de date, rularea unei interogari pe un server de baze de date, lucrul cu fisiere sau prelucrarea imaginilor. O lista completa a functiilor speciale care introduc resurse, dar si a tipurile de resurse permise in PHP, poate fi accesata la urmatoarea adresa http://www.php.net/manual/ en/resource.php.
<?php $rs = mysql_connect(); echo get_resource_type($rs); // mysql link ?>

7.7. Operatori Operatorii sunt elemente ale limbajelor de programare care actioneaza asupra unuia sau mai multor operanzi pentru a produce o valoare. Operatorii reprezinta simboluri utilizate in implementarea operatiilor care pot fi executate asupra operanzilor. Operanzii pot fi variabile, constante, expresii sau functii. O clasificare a operatorilor dupa numarul de operanzi prelucrati arata astfel: operatori unari din aceasta categorie fac parte operatorii care necesita un singur operand (++, !, --); operatori binari acest grup cuprinde majoritatea operatorilor din limbajul PHP (+, *, =, ==); operatori ternari PHP ofera un singur operator care are trei termeni, operatorul conditional (?:).
<?php $a = ++3; $b = 4 + 5; $c = (2==6) ? 'egal' : ' diferit'; ?> //operatorul de incrementarea este unar; //operatorul pentru adunare este binar; //operatorul conditional este ternar;

Limbajul PHP ofera suport pentru urmatoarele categorii de operatori: aritmetici, de atribuire, pe biti, relationali, pentru controlul erorilor, de executie, de incrementare/decrementare, logici, pentru siruri de caractere, pentru tablouri, de tip. Operatorii aritmetici permit implementarea operatiilor matematice de baza. Sunt operatori binari si se aplica unor operanzi de tip numeric. Daca unul dintre operanzi nu este numeric se realizeaza mai intai conversia acestuia la un tip numeric. Cu exceptia cazului in care operanzii sunt numere intregi divizibile, operatorul pentru impartire returneaza o valoare de tipul float. Operatiei de deteriminare a restului returneaza intotdeauna o valoare de tip integer. Operatiile de impartire si determinare a restului care au al doilea operand 0 nu sunt permise; in aceste situatii se genereaza o eroare. Operatorul de scadere poate fi utilizat si ca operator unar, daca se doreste reprezentarea unui numar negativ.

Operator

Tip

Exemplu

Nume

Descriere

+ * / %

binar binar binar binar binar

$a + $b $a - $b $a * $b $a / $b $a % $b

adunare scadere inmultire impartire modulo

suma dintre $a si $b diferenta dintre $a si $b produsul dintre $a si $b impartirea lui $a la $b restul impartirii lui $a la $b

Pentru implementarea operatiei de atribuire se utilizeaza operatorul =. Acesta are urmatoarea semnificatie: valoarea expresiei din dreapta este atribuita variabilei din stanga. Operatorul de atribuire face parte din categoria operatorilor binari si are o prioritate scazuta. Regula de asociativitate corespunzatoare acestui operator este: de la dreapta la stanga.
<?php $a = 3; $b = 2 + 5; $c = ($d = 2) + 1; ?>

Limbajul PHP ofera posibilitatea utilizarii operatorilor de atribuire compusi, care permit o scriere mai compacta a atribuirilor de tipul: $variabila = $variabila op expresie, sub urmatoarea forma: $variabila op = expresie. Pot fi utilizati urmatorii operatori de atribuiere compusi: +=, -=, *=, /=, %=, &=, |=, ^=, <<=, >>=, .= .
<?php $a = 2; $b = 1; $a %= $b; echo $a . '<br />'; $a = 2; $b = 1; $a <<= $b; echo $a . '<br />'; $a = 2; $b = 1; $a .= $b; echo $a . '<br />'; ?>

//echivalent cu $a = $a % $b //$a = 0

//echivalent cu $a = $a << $b //$a = 4

//echivalent cu $a = $a . $b //$a = 21

In mod normal, prin intermediul operatorilor de atribuire se realizeaza doar copierea valorii unei variabile intr-o alta variabila. Astfel, modificarile aduse ulterior uneia dintre variabile nu o afecteaza pe cealalta. Limbajul PHP permite si atribuirea unei valori prin referinta, daca se utilizeaza sintaxa $variabila1 = &variabila2. In acest caz noua variabila va fi o referinta catre variabila originala. Modificarile realizate asupra uneia dintre variabile vor duce si la modificarea valorii celei de-a doua.
<?php $a = 'Marian'; $b = $a; $b = 'Bucos'; echo '$a = ' . $a . '<br />'; echo '$b = ' . $b . '<br />'; $a = 'Marian';

//$a = Marian //$b = Bucos

$b = &$a; $b = 'Bucos'; echo '$a = ' . $a . '<br />'; echo '$b = ' . $b . '<br />'; ?>

//$a = Bucos //$b = Bucos

Operatorii pe biti permit manipularea numerelor intregi in reprezentare binara. In cazul in care operanzii nu sunt intregi, interpretorul PHP va realiza conversia la tipul integer. Daca ambii operanzii sunt de tip string, atunci operatorul binar va actiona asupra caracterelor ASCII corespunzatoare valorilor.
<?php echo ("cod" ^ "cos") . '<br />'; echo ("11" ^ "13") . '<br />'; echo ("11" ^ 13) . '<br />'; echo (11 & 13) . '<br />'; echo (11 | 13) . '<br />'; echo (11 ^ 13) . '<br />'; echo (~11) . '<br />'; echo (11 << 2) . '<br />'; echo (11 >> 2) . '<br />'; ?> //ASCII 0017 //ASCII 0002 //6 //1011 & 1101 = 1001 (9) //1011 & 1101 = 1111 (15) //1011 ^ 1101 = 0110 (6) //-12 //00101100 (44) //0010 (2)

In cazul operatorilor de deplasare, primul opedand este prelucrat la nivel de biti prin intermediul celui de-al doilea operand. Al doilea operand stabileste deplasarea, adica numarul de biti cu care se face deplasarea. Cu exceptia cazurilor de depasire, deplasarea la stanga cu n biti este echivalanta cu inmultirea cu 2 la puterea n, in timp ce deplasarea la dreapta cu n biti este echivalanta cu impartirea cu 2 la puterea n.
Operator & Tip binar Exemplu $a & $b Nume si pe biti Descriere bitii pozitionati pe 1 in $a si n $b sunt pozitionati pe 1 in rezultat bitii pozitionati pe 1 in $a sau $b sunt pozitionati pe 1 in rezultat bitii pozitionati pe 1 in $a sau in $b, dar nu in ambele parti, sunt pozitionati pe 1 in rezultat negare bit cu bit; bitii care sunt pozitionati pe 1 in $a vor fi pozitionati pe 0 si vice versa deplaseaza bitii din $a cu $b pozitii spre stanga; fiecare pas inseamna inmultire cu 2; in cazul deplasarii la stanga cu o pozitie, bitul cel mai semnificativ se pierde, iar la dreapta se completeaza cu bitul 0 deplaseaza bitii din $a cu $b pozitii spre dreapta; fiecare pas inseamna impartire cu 2; in cazul deplasarii la dreapta cu o pozitie, bitul cel mai putin semnificativ se pierde, iar la stanga se completeaza cu un bit identic cu bitul de semn

binar

$a | $b

sau pe biti

binar

$a ^ $b

sau exclusiv pe biti

unar

~$a

complementare

<<

binar

$a << $b

deplasare la stanga

>>

binar

$a >> $b

deplasare la dreapta

Operatorii relationali sunt operatori binari care permit compararea a doua valori. Expresiile in care apar astfel de operatori returneaza o valoare de tip boolean (TRUE sau FALSE), in functie de rezultatul comparatiei.

Operator == ===

Tip binar binar

Exemplu $a == $b $a === $b

Nume egal identic

Descriere adevarat daca $a este egal cu $b adevarat daca $a este egal cu $b, iar $a si $b au acelasi tip adevarat daca $a este diferit de $b adevarat daca $a este diferit de $b adavarat daca $a diferit de $b sau $a si 4b nu au acelasi tip adevarat daca $a mai mic decat $b adevarat daca $a mai mare decat $b adevarat daca $a mai mic sau egal cu $b adevarat daca $a mai mare sau egal cu $b

!= <> !==

binar binar binar

$a != $b $a <> $b $a !== $b

diferit diferit neidentic

< > <= >=

binar binar binar binar

$a < $b $a > $b $a <= $b $a >= $b

mai mic mai mare mai mic sau egal mai mare sau egal

Incepand cu versiunea PHP4, pe langa operatorul care testeaza egalitatea a doua valori (==), a fost introdus si operatorul identic (===), care returneaza TRUE doar daca operanzii testati sunt egali si au acelasi tip de date. Daca se compara o valoare de tipul integer cu una de tipul string, se realizeaza mai intai conversia sirului de caractere la un numar. Doua siruri de caractere numerice sunt comparate ca si intregi.
<?php var_dump(1 == "01"); var_dump(1 == "Marian"); var_dump("Marian" == "Bucos"); var_dump("1" == "01"); var_dump(1==="01"); ?> //TRUE //FALSE //FALSE //TRUE //FALSE

Din categoria operatorilor relationali face parte si operatorul conditional, singurul operator ternar din limbajul PHP. Acesta are forma expresie1 ? expresie2 : expresie3, si are ca rezultat valoarea expresiei expresie2 daca valoarea lui expresie1 este TRUE sau valoarea expresiei expresie3 in cazul in care valoarea lui expresie1 este FALSE.
<?php $sex = 'm'; $text = "Persoana este de sex "; $text .= ($sex == 'f') ? "feminin" : "masculin"; echo $text; ?>

Limbajul PHP pune la dispozitie un operator special pentru controlul erorilor, implementat prin simbolul @. Pozitionat inaintea unei expresii, acest operator, permite ignorarea mesajelor de eroare care pot fi generate in urma evaluarii expresiei. Pozitionand directiva track_errors pe 1 sau on in fisierul de configurare php.ini, ultimul mesaj de eraoare generat la rularea unui script va fi salvat in variabila $php_errormsg.
<?php $fisier = @fopen("fisier.php", "r") or die($php_errormsg); ?>

De exemplu, daca se doreste deschiderea pentru citire a unui fisier care nu exista, folosind functia

fopen(), se va genera un mesaj de eroare de tipul Warning: fopen(fisier.php) [function.fopen]: failed to open stream: No such file or directory. Daca functia este precedata de operatorul pentru controlul erorilor, mesajul de eroare este ignorat. In cazul in care nu aveti acces la fisierul de configurare corespunzator modulului PHP, puteti crea un fisier .htaccess pe server, in care introduceti urmatoarea linie: php_flag track_errors on. Un alt operator special disponibil in limbajul PHP este operatorul de executie (backticks), ``. Prin intermediul acestui operator por fi introduse comenzi shell, pentru a fi executate pe server.
<?php $output = `ls -l`; echo "<pre> $output </pre>"; /* total 4 -rwxrwxrwx 1 www-data www-data 61 Dec 31 03:34 backticks.php */ ?>

Scriptul de mai sus realizeaza o listare a fisierelor din directorul de test, prin rularea pe server a comenzii Linux ls -l. Incrementarea si decrementarea se refera la modificarea unei valori, prin cresterea, respectiv descresterea, cu o unitate. Pentru a implementa astfel de operatii pot fi utilizati operatorii unari de incrementare sau decrementare.
Operator Tip Exemplu Nume Descriere

++ ++ ---

unar unar unar unar

++$a $a++ --$a $a--

pre-incrementare post-incrementare pre-decrementare post-decrementare

incrementeaza $a cu 1, apoi il returneaza returneaza $a, apoi il incrementeaza cu 1 decrementeaza $a cu 1, apoi il returneaza returneaza $a, apoi il decrementeaza cu 1

Dupa cum se poate observa, operatorii de incrementare/decrementare prezinta doua formate: postfixat si prefixat. Diferenta intre acestea consta in modul in care se realizeaza operatiile de incrementare/ decrementare: dupa sau inainte de folosirea valorii variabilei.
<?php $a = 11; echo "a = " . $a; echo "<br /> ++a = " . ++$a; echo "<br /> a = " . $a; echo "<br /> a++ = " . $a++; echo "<br /> a = " . $a; echo "<br /> --a = " . --$a; este 12 echo "<br /> a = " . $a; echo "<br /> a-- = " . $a--; echo "<br /> a = " . $a; ?> //noua valoare a lui a este 12 //rezultatul operatiei de post-incrementare este 12 //noua valoare a lui a este 11 //valoare initiala a lui a este 11 //rezultatul operatiei de pre-incrementare este 12 //noua valoare a lui a este 12 //rezultatul operatiei de post-incrementare este 12 //noua valoare a lui a este 13 //rezultatul operatiei de pre-decrementare

Operatia de incrementarea poate fi aplicata si valorilor de tip string; in acest caz modificarea valorii actioneaza asupra codului ASCII, dar nu nici un efect asupra caracterelor care nu sunt litere sau cifre. In schimb, decrementarea nu are sens decat in cazul sirurilor de caractere numerice.

Operatorii logici permit combinarea unor valori de tip boolean pentru a obtine o noua valoare logica. Astfel, mai multe conditii pot fi evaluate impreuna, prin intermediul unei singure expresii. Cu exceptia operatorului de negare (!), care actioneza asupra unui singur operand, toti ceilalti operatori logici sunt binari.
Operator AND OR XOR Tip binar binar binar Exemplu $a AND $b $a OR $b $a XOR $b Nume si logic sau logic sau exclusiv logic Descriere adevarat daca $a si $b sunt adevarate adevarat daca $a sau $b este adevarat adevarat daca $a sau $b este adevarat, dar nu ambele adevarat daca $a este fals adevarat daca $a si $b sunt adevarate adevarat daca $a sau $b este adevarat

! && ||

unar binar binar

!$a $a && $b $a || $b

non si logic sau logic

Pentru implementarea operatorului si logic pot fi utilizate formele: AND, &&. Deasemenea, operatorul sau logic prezinta doua forme de implementare: OR, ||. Motivul pentru care exista doua forme pentru acesti operatori este dat de faptul ca acestea au prioritati diferite. Evaluarea expresiilor logice se desfasoara dupa acelasi principiu ca si in limbajul de programare C, short circuit. Astfel, daca primul operand al unei expresii in care apare operatorul si logic are valoarea FALSE, cel de-al doilea operand nu se mai evalueza, deoarece rezultatul este cu siguranta FALSE. In PHP operatorul de concatenare (.) este utilizat pentru a alatura doua sau mai multe argumente. Din categoria operatorilor pentru siruri de caractere face parte si operatorul de atribuire (.=), care concateneaza operatorul din partea dreapta la argumentul din stanga.
<?php $prenume = "Marian"; $nume = "Bucos"; $output = "Numele meu este "; $output .= $prenume . " " . $nume . "."; echo $output; ?>

Operatori pentru tablouri Rezultatul concatenarii a doua tablouri este un tablou care contine elementele din cele doua tablouri. Daca cele doua tablouri contin elemente cu aceeasi cheie, atunci sunt pastrate doar elementele care reprezinta primul operand.
<?php $array1 = array(1, 2, "c"=>3); $array2 = array("0&quot;=>"a", "b"=>2, "c"=>0); $array = $array1 + $array2; var_dump($array1); //array(3) { [0]=> int(1) [1]=> int(2) ["c"]=> int(3) } var_dump($array2); //array(3) { [0]=> string(1) "a" ["b"]=> int(2) ["c"]=> int(0) } var_dump($array); //array(4) { [0]=> int(1) [1]=> int(2) ["c"]=> int(3) ["b"]=> int(2) } ?> Operator + Tip binar Exemplu $a + $b Nume reunit (concatenare) Descriere rezultatul concatenarii lui $a si 4b este un vector care contine elementele din cei doi vectori

==

binar

$a == $b

egal

adevarat daca $a si $b au aceleasi perechi de tipul cheie/valoare adevarat daca $a si $b au aceleasi perechi de tipul cheie/valoare, in aceiasi ordine si de acelasi tip adevarat daca $a nu este egal cu $b adevarat daca $a nu este egal cu $b adevarat daca $a nu este identic cu $b

===

binar

$a === $b

identic

!= <> !==

binar binar binar

$a != $b $a <> $b $a !== $b

diferit diferit neidentic

Operatori de tip Operatorul instanceof este un operator binar, care are ca operatori un obiect si un nume de clasa sau interfata. Acest operator returneaza TRUE daca obiectul este o instanta a clasei sau este derivat din aceasta.
<?php class clasa { } $obiect = new clasa; var_dump($obiect instanceof clasa); ?>

//bool(true)

Un rol important in evaluarea expresiilor trebuie acordat ordinii de executie a operatiilor. In limbajul PHP precedenta operatorilor poate fi sintetizata prin intermediul tabelului urmator. Operatorii sunt prezentati in ordine descrescatore a precedentei.
Operator new [ ++ -~ (int) (float) (string) (array) (object) (bool) @ Tip unar unar unar unar Asociativitate de la stanga la dreapta -

instanceof ! */% +-. << >> < <= > >= <> == != === !== & ^

binar unar binar binar binar binar binar binar binar

de la dreapta la stanga de la stanga la dreapta de la stanga la dreapta de la stanga la dreapta de la stanga la dreapta de la stanga la dreapta

binar

de la stanga la dreapta

&& || ?: = += -= *= /= .= %= &= |= ^= <<= >>= and xor or ,

binar binar ternar binar binar binar binar binar

de la stanga la dreapta de la stanga la dreapta de la stanga la dreapta de la dreapta la stanga de la stanga la dreapta de la stanga la dreapta de la stanga la dreapta de la stanga la dreapta

Expresiile reprezinta combinatii de elemente constructive ale limbajelor de programare. Expresiile sunt compuse din: numere (123.4), siruri de caractere ("baze de date"), constante (PHP_VERSION), operatori (+, OR). Cea mai simpla definitie pentru o expresie este urmatoarea: orice structura care are o valoare.
<?php $a = 2 * 3 + 4 * 5; $b = "baze" . " de date"; $c = $d = 7; $e = $a++; $f = (float)$a; if ($a>$c) echo $a; ?>

O serie de expresii terminate prin punct si virgula (;) constituie o instructiune. Mai multe instructiuni delimitate de tag-uri PHP alcatuiesc un script (program) PHP.

S-ar putea să vă placă și