invata php cu punctsivirgula

Upload: patriciu-lazar

Post on 16-Jul-2015

184 views

Category:

Documents


4 download

TRANSCRIPT

Invata PHP cu punctsivirgula.roPregatirea calculatorului pentru lucrul cu PHPInainte ca paginile care contin cod PHP sa poata fi vizualizate, este nevoie sa instalati interpretorul PHP. Acesta actioneaza ca o componenta a serverului web care este invocata de ori cate ori o pagina PHP este intalnita. Aceasta componenta proceseaza pagina si apoi o transmite inapoi la web-server, ajungand in final in browserele utilizatorilor. Acest proces este prezentat in imaginea din dreapta de mai jos

Deservirea unei pagini statice, fara interventia interpretorului PHP

Deservirea unei pagini dinamice, modificata de PHP in momentul request-ului

Static si dinamicDin imaginile de mai sus, se observa ca atunci cand nu exista un interpretor PHP, paginile sunt transmise direct catre utilizatori asa cum sunt salvate pe disc, fara modificari. Pentru a actualiza continutul acestora, este nevoie de interventie directa asupra lor si salvarea modificarilor pe server. Aceste pagini sunt denumite "pagini statice". Spre exemplu, presupunand ca avem o pagina statica ce afiseaza membrii unei comunitati, la fiecare inscriere a unei noi persoane, pagina ar trebui modificata manual de catre cineva cu acces la serverul web. Lucrurile se complica daca acea lista este personalizata, cu trimiteri catre alte informatii (cum ar fi detalii de contact pentru fiecare, etc) sau cu un design intortocheat. Toate aceste probleme pot fi rezolvate cu ajutorul PHP. Folosind o secventa de cod PHP am putea prelua lista de membri dintr-o baza de date, eliminand problema actualizarii - nu va mai fi nevoie sa se modifice pagina odata cu fiecare membru nou, scriptul PHP va afisa in mod automat noile persoane adaugate in baza de date. Este rezolvata si problema linkurilor personalizate, sau a designului - toate elementele specifice unei persoane pot fi generate in mod automat. Aceste pagini sunt, asadar, modificate de catre PHP la momentul accesarii lor de catre utilizatori. In functie de parametrii primiti si de secventa de cod definita de programator, aceasi pagina poate avea continut diferit. Aceasta proprietate este denumita dinamism, iar o astfel de pagina este considerata pagina dinamica.

Instalarea interpretorului PHPPentru ca fisierele ce contin cod PHP sa poata fi interpretate, devenind astfel dinamice, serverul web trebuie configurat pentru "comunicarea" cu modulul PHP. Pentru inceput, cea mai simpla modalitate de a avea totul pregatit pentru a lucra cu PHP este un pachet "All in one". Voi descrie pe scurt pasii necesari instalarii programului EasyPHP, o aplicatie care include serverul web Apache, interpretorul PHP, sistemul de gestiune a bazelor de date MySQL si aplicatia de administrare a bazelor de date phpMyAdmin. Nota: trebuie sa dezinstalati Apache, PHP sau MySQL de pe calculator (daca le aveti deja) inainte de a instala EasyPHP. 1. Descarcati EasyPHP. Mergeti la http://www.easyphp.org/ -> Download EasyPHP ( sau direct la http://garr.dl.sourceforge.net/sourceforge/quickeasyphp/EasyPHP-3.0setup.exe ) 2. Instalati EasyPHP (e bine sa se pastreze configurarile implicite). 3. Porniti programul EasyPHP (de cele mai multe ori va porni automat) Nota: la avertizarile de la Windows XP/Vista trebuie sa se aleaga "Allow" sau "Unblock" altfel este posibil ca serverul web sa nu functioneze. 4. In fereastra de EasyPHP apasati F8 (sau Click-Dreapta pe iconita EasyPHP de langa ceas - in Systray - si alegeti Explore). Se va deschide un folder, care reprezinta locatia de unde vor fi luate fisierele cand sunt afisate in browser (de obicei C:\Program Files\EasyPHP 3.0\www). Nota: in Windows Vista este nevoie sa deschideti manual acest folder (F8 nu pare sa functioneze). Aceasta locatie poarta numele de Document Root si aici trebuie puse toate fisierele .php pe care le scrieti. 5. Salvati un fisier de test in locatia de mai sus. Dati-i un nume sugestiv, gen test.php. Editati fisierul astfel incat sa contina urmatoarea secventa:

6. Intr-un browser (Firefox, Internet Explorer, Opera, Safari, etc) mergeti la http://localhost/. Va fi afisata o pagina cu linkuri catre fisierele/folderelor din Document Root care pot fi accesate. Faceti click pe test.php. O alta modalitate de a accesa un fisier este sa mergeti direct la http://localhost/[cale]/[nume].php, de exemplu http://localhost/test.php. 7. Accesand http://localhost/test.php ar trebui sa fie afisata o pagina alba cu mesajul de mai sus.

Retineti! Toate fisierele PHP pe care le scrieti (inclusiv cele de test preluate de pe acest site) *trebuie* salvate in folderul Document Root (locatia implicita este C:\Program Files\EasyPHP 3.0\www). Webserver-ul local instalat de EasyPHP va cauta fisierele doar in aceasta locatie. Daca fisierele sunt salvate in alta parte ele nu vor mai putea fi accesate in browser.

De ce imi trebuie un server web?Instaland EasyPHP, calculatorul personal devine un server web (local, ce-i drept accesibil doar de catre tine). Practic PC-ul se comporta ca un site ce are adresa http://localhost/ (sau http://127.0.0.1/). Este foarte important ca fisierele PHP sa fie accesate prin intermediul serverului web, deoarece acesta recunoaste scripturile PHP si invoca automat interpretorul PHP. Fara aceasta intermediere oferita de web-server, scripturile PHP nu ar fi procesate ci trimise asa cum sunt la browser. De exemplu, avem un fisier care contine doar urmatorul cod: (atentie la semnul ! in afara tagurilor) !

Sa presupunem ca fisierul se numeste salut.php. - Daca il accesam in browser folosind adresa "http://localhost/salut.php" (prin intermediul serverului web local) atunci interpretorul PHP este invocat, scriptul este executat iar rezultatul procesarii afisat de browser va fi "Salut!". - Daca accesam fisierul direct de pe disc, scriind in browser calea lui "file:///C:/Program Files/EasyPHP 3.0/www/salut.php" se va afisa (in cel mai fericit caz) doar "!". Asta pentru ca interpretorul PHP nu este invocat, iar fisierul este transmis ca atare, cu tagurile de PHP (care sunt ignorate de browser).

PHP si programarea server-sidePe scurt, ce este PHP? Ca idee generala, PHP reprezinta un limbaj ce permite modificarea paginilor web inainte ca acestea sa fie transmise de server catre browserele utilizatorilor. PHP poate insera text intr-ul fisier HTML deja definit, poate defini un fisier HTML de la zero, poate sa afiseze o imagine sau sa redirectioneze utilizatorul catre alta pagina. In cadrul acestui proces, PHP poate consulta baze de date, fisiere externe sau orice alta resursa, poate trimite email-uri sau executa comenzi ale sistemului de operare. Modul in care PHP modifica/defineste o pagina ce va fi afisata de browser este prin instructiunile scrise de programator si delimitate de etichetele . Astfel, orice se afla intre aceste tag-uri va fi executat de interpretorul PHP si inlocuit cu rezultatul executiei. Ce este in afara lor ramane neschimbat si este transmis catre browser. Spre exemplu, avem o pagina ca mai jos. Azi e

Rezultatul va fi o pagina HTML ce va contine cuvintele "Azi e" si rezultatul codului PHP (in cazul acesta - data curenta). Codul HTML final, transmis de server in urma procesarii PHP este urmatorul:

Azi e 16.04.2009

Codul PHP nu trebuie sa fie neaparat intercalat in pagina HTML. Secventa de mai jos produce o pagina similara celei de mai sus (in acest caz PHP produce o pagina HTML de la zero).

Nota: interpretorul PHP nu este instalat implicit pe orice calculator. Pentru ca toate exemplele de pe site sa functioneze, trebuie sa instalati (manual) un interpretor. Vedeti sectiunea "Inainte de a incepe" pentru detalii.

Ce afiseaza PHP?Rezultatul unui script PHP este de obicei text simplu care, de cele mai multe ori, este interpretat ca fiind cod HTML. Cu alte cuvinte, in majoritatea cazurilor PHP returneaza o pagina ce va fi afisata in browser. La inceput, acest lucru poate genera confuzii, intrucat sursa HTML este diferita de ceea ce se afiseaza efectiv in browser. Spre exemplu, fie urmatoarea secventa de cod:

Probabil v-ati astepta ca rezultatul sa fie un text afisat pe 2 linii. Salvand aceasta secventa intr-un fisier PHP si accesandu-l prin intermediul unui web-server, veti observa ca rezultatul este urmatorul:SalutAcesta este un script simplu

Desi este confuz, rezultatul este corect. Codul PHP afiseaza doar caracterele care i-au fost indicate. Sfarsitul de linie reprezinta un caracter separat, ne-printabil, dar care controleaza cum apare textul pe ecran. In cazul nostru, nu s-a transmis acest caracter (numit si new-line) si prin urmare PHP nu l-a afisat. Sa rescriem exemplul de mai sus pentru a se afisa si caracterul "sfarsit de linie"

Verificand iar in browser veti constata ca nu s-a schimbat nimic. La prima vedere. In realitate rezultatul este afisat pe 2 linii, in textul trimis de PHP catre browser. Intrucat pagina este interpretata ca fiind HTML, browserul ignora caracterele new-line. Pentru verificare vizualizati sursa paginii (meniul View din browser -> view source). Pentru a ajunge la efectele dorite (acelea de a afisa un text pe 2 linii) trebuie folosit urmatoarea secventa:

Sursa paginii arata in felul urmator:Salut
Acesta este un script simplu

In browser nu apare tagul BR, intrucat acesta este interpretat ca sfarsit de linie. Caracterul "new-line" afisat de noi (in print "\n") este ignorat oricum. Rezutatul:Salut Acesta este un script simplu

Nota:Este foarte important sa se inteleaga diferenta dintre ceea ce se returneaza in urma executiei unui script PHP si ceea ce se afiseaza propriu-zis in browser. Pe scurt, PHP printeaza cod HTML care este afisat diferit de browsere. De asemenea, trebuie inteles faptul ca functia print nu afiseaza textul pe mai multe linii daca nu se specifica acest lucru in mod express. Spre exemplu fie urmatoare secventa de cod:

Rezultatul va fi123

S-a afisat doar ce s-a indicat, 3 caractere, pe o singura linie, fara spatii. Un alt lucru important de retinut este faptul ca odata printat, un text nu mai poate fi "sters". Nu exista "undo" pentru un print. Se poate captura intregul continut ce se

transmite la finalul executiei, dar nu se poate altera textul afisat de o instructiune print anume. Intelegand aceste aspecte va va fi mai usor in lucrul cu PHP si in modul in care verificati rezultatele scripturilor voastre.

Taguri PHP, instructiuni, punct si virgulaCodul PHP trebuie inclus in fisierele ce vor fi deservite utilizatorilor finali si trebuie delimitat de restul continutului prin tagul de inceput . Practic tot ce se afla in interiorul acestor etichete va fi interpretat ca fiind cod-sursa PHP (cod ce va fi executat de interpretorul PHP). Textul din afara celor 2 taguri este lasat neschimbat, fiind ulterior interpretat de browser. Se pot folosi si alte etichete in functie de configuratia serverului web, dar acestea nu sunt recomandate. /* forma disponibila oricand, putin folosita */

Codul PHP este format din instructiuni - comenzi date catre interpretor, in urma carora se executa ceva. Asa cum s-a mai spus, PHP este folosit in principal pentru a genera cod HTML, asa ca de cele mai multe ori instructiunile folosite sunt cele de afisare. In aplicatii mai complexe se pot insa folosi si instructiuni de conectare la bazele de date, de citire/scriere/manipulare fisiere, intructiuni de trimitere email-uri si altele. Instructiunile se pot grupa in blocuri delimitate de acolade { }. Aceste blocuri, numite si "instructiuni complexe" se comporta ca si cum ar fi o singura instructiune (vezi mai jos exemple de blocuri). Toate instructiunile (in afara de blocuri) trebuie sa fie terminate cu punct si virgula ( ; ). Lipsa acestuia genereaza o eroare.

Intructiuni uzuale

echo, print, printfIn multe din scripturile scrise de incepatori (si nu numai) continutul rezultat in urma executiei este un text (care poate fi sau nu cod HTML). Pentru a obtine acest text, secventele de cod trebuie sa contina instructiuni explicite care sa "spuna" intrepretorului ce anume trebuie afisat. Instructiunile de afisare sunt print, echo si printf. Exista si alte modalitati dar aceste 3 instructiuni sunt cele mai uzuale si usor de folosit. Diferente intre ele exista (vezi http://www.faqts.com/knowledge_base/view.phtml/aid/1/fid/40), dar ca idee generala print si echo fac acelasi lucru si poate fi folosita oricare dintre ele. printf este folosita mai rar datorita sintaxei oarecum greoaie.

Instructiuni de atribuireAlte instructiuni, la fel de uzuale ca cele de afisare, sunt cele de atribuire. Acestea sunt explicate mai pe larg in sectiunea "Variabile. Constante".

Instructiunea ifIn afara de aceste 2 categorii, la fel de des intalnita este instructiunea if. Aceasta se numeste instructiunea de test si este folosita pentru a executa o secventa de cod in functie de valoarea de adevar a unei conditii. Exista mai multe forme, prezentate mai jos:if( conditie ) instructiune 1;

Aceasta forma permite executarea unei instructiuni numai daca este indeplinita o conditie. Conditia poate fi orice expresie de genul "2 < 3", "variabila $a este definita", s.a. tradusa in limbajul PHP. Instructiunea poate fi simpla (o singura instructiune) sau un bloc (mai multe instructiuni delimitate de acolade). Regula este ca atunci cand este nevoie sa se execute mai mult

de o instructiune, trebuie creat un bloc (trebuie folosite acoladele). Exemplu:

Atentie! Daca nu se foloseste un bloc in cadrul instructiunii if, atunci doar prima instructiune dintre cele existente se executa in urma evaluarii conditiei, pe cand celelalte se vor executa intotdeauna, indiferent de rezultatul verificarii. De exemplu:

Codul de mai sus va afisa:Este 3 mai mic decat 2?
3 este mai mic decat 2

Pentru ca nu am inclus cele 2 instructiuni print intr-un bloc, a doua instructiune s-a executat indiferent de valoarea de adevar a conditiei. Codul corect (din punct de vedere logic) ar fi urmatorul, care contine un bloc de instructiuni:

Instructiunea if - elseDe multe ori este nevoie sa se specifice o instructiune ce trebuie executata daca nu este indeplinita conditia. In acest caz se foloseste if - else.if( conditie ) instructiune 1; else instructiune 2;

Aceasta forma permite executarea unei instructiuni atunci cand se indeplineste conditia sau executarea alteia diferite in caz contrar. Aceleasi observatii ca si mai sus se aplica.

Siruri de caractereIn majoritatea scripturilor PHP se lucreaza cu bucati de text denumite siruri de caractere sau string-uri. PHP prezinta particularitati in modul in care sunt folosite stringurile, particularitati ce sunt prezentate in exemplele de mai jos. Nota: sirurile de caractere reprezinta expresii (entitati ce au/returneaza o valoare). Asadar, un string poate fi folosit, pe langa, afisare, in atribuiri, la verificari, etc. In exemplele ce urmeaza s-a optat pentru afisarea sirurilor.

Nota: in acest exemplu nu este nici o diferenta intre modul de afisare a sirurilor delimitate prin ghilimele si cele delimitate prin apostrof. Cu toate astea, PHP trateaza in mod diferit aceste caractere. Mai multe explicatii si exemple sunt prezentate in pagina "Variabile.Constante".

ComentariiComentariile sunt portiuni de cod care nu se executa. Sunt folosite de programatori de regula pentru a da diverse explicatii despre logica aplicatiei, variabile si altele. Comentariile nu afecteaza executia unui script si pot fi sterse din cod fara nici un efect.

Nota: comentariile /* */ nu pot fi imbricate (unele in altele). Exemplul urmator nu este un cod valid.

Este un lucru foarte util sa folositi comentarii in cod pentru a explica modul de rezolvare a problemei abordate, sau pentru a da detalii despre operatiile efectuate. Acestea va vor ajuta mai tarziu daca veti vrea sa modificati codul scris, sau vor oferi altor persoane informatii (valoroase) despre cum ati gandit codul respectiv.

Terminarea executiei Nota: instructiunile die si exit sunt echivalente.

Variabile in PHPCe sunt variabilele?Variabilele sunt elemente ce au o anumita valoare la un moment dat. Valoare unei variabile se poate schimba de-a lungul executiei unui script. Lucrul cu variabile in PHP este foarte usor. Nu trebuie specificat un tip pentru ele (de genul "variabila text", "variabila numerica") ci acesta este determinat in mod automat. Variabilele sunt diferentiate de celelalte elemente ale limbajului prin caracterul $. Astfel, o variabila are forma "$nume". Numele variabilei poate fi orice identificator valid (un text ce contine doar litere, cifre si underscore _, fara spatii sau alte caractere; un identificator nu poate incepe cu o cifra).

Declararea variabilelorIn PHP declararea variabilelor se realizeaza in acelasi timp cu initializarea lor (cu atribuirea unei valori de inceput). Atribuirea unei valori se realizeaza cu ajutorul instructiunii de atribuire ce are forma = ;// variabile numerice $variabila = 1; $numar = 0; // variabile text (stringuri) $text = "Salut"; $text2 = 'Ce faci?'; // variabile logice (boolean) $stiuPHP = true; $uitRepede = false; // vector $vectorGol = array(); $vectorS = array( 10,11,12,13 ); // vector simplu // vector asociativ $vector = array( 'luni' => 'Monday', 'marti' => 'Tuesday', 'miercuri' => 'Wednesday' ); // definirea unei noi componente a unui vector asociativ $vector[ 'joi' ] = 'Thursday'; // vector $vectorS2 0 1 2 3 ); simplu definit ca asociativ, echivalentul lui $vectorS = array( => 10, => 11, => 12, => 13

Nota: un vector asociativ se diferentiaza de unul normal prin faptul ca are chei alfanumerice (cuvinte). Atentie: PHP face distinctie intre literele mari si mici. Astfel, cele 3 variabile de mai jos sunt TOTAL diferite:$variabila = "negru"; $vaRiabila = "alb"; $Variabila = 1;

Atribuirea de valoriSe realizeaza la fel ca si declararea prin intermediul instructiunii de atribuire.# atribuirea unei valori anume $variabila = 2;

# copierea valorii de la o alta variabila $text = $variabila; # copierea valorii functioneaza si in cazul vectorilor # in urma copierii cei 2 vectori vor fi identici $vectorS = $vectorS2; # toate componentele lui $vectorS2 sunt copiate in $vectorS # in cazul vectorilor se pot atribui valori separat fiecarei componente $vectorS[ 0 ] = 100; $vectorS[ 3 ] = 10; $vector[ 'luni' ] = 'Lundi'; $vector[ 'joi' ] = 'Jeudi';

Stergerea variabilelorDe obicei nu e nevoie ca variabilele sa fie sterse dupa ce au fost folosite. Totusi, lucrul aceste se poate face in urmatoarele moduri:unset( $variabila ); $variabila = null;

Afisarea variabilelorAfisarea se realizeaza utilizand oricare din instructiunile de afisare:$variabila = "Text"; print $variabila; echo $variabila;

Ponturi de PHP

Diferenta dintre ghilimele simple si duble la declararea variabilelor Ghilimelele duble permite compilatorului sa "citeasca" variabilele ce apar in interiorul textului.$today = date( 'd-m-Y' ); $text1 = "Azi e $today"; print $text1; // Azi e 17-07-2008

Astfel, textul cuprins intre ghilimele duble este procesat inainte de afisare: variabilele sunt cautate iar valoarea lor este afisata in locul numelui. In cazul apostrofului, textul este afisat neschimbat, iar variabilele nu sunt interpretate.$today = date( 'd-m-Y' ); $text2 = 'Azi e $today';

print $text2; // Azi e $today

Verificarea daca o variabila e definita Se pot folosi 2 functii: isset si empty .// definim o variabila, cealalta definire nu se executa $var = 0; // $var2 = 1; var_dump( isset($var) ); // bool(true) var_dump( isset($var2) ); // bool(false) var_dump( empty($var1) ); // bool(true), pentru ca 0 este considerat nul var_dump( empty($var2) ); // bool(true)

Atentie, isset verifica daca variabila a fost definita, pe cand empty verifica daca a fost definita si daca are o valoare considerata vida. O variabila este vida daca are urmatoarele valori:o o o o o o

"" (text de lungime 0) 0 (cifra 0) "0" (textul "0") null false array() (vector gol)

Nota: pentru valorile de mai sus, empty returneaza false

Operatorul {} Pot exista situatii cand anumite variabile trebuie procesate mai inainte decat altele, sau mai inainte de procesarea intregii instructiuni. De exemplu:$salut = array( 'dimineata' => 'Buna dimineata', 'pranz' => 'Buna ziua', 'seara' => 'Noapte buna' ); print "$salut[ 'pranz' ], vizitatorule"; // eroare

Modul in care am scris variabila ($salut[ 'pranz' ]) este corect. Doar ca PHP-ul nu "stie" sa vada variabila noastra ca pe un element din vector, sa-i ia valoarea si apoi sa afiseze tot textul. Pentru a rezolva aceasta problema folosim acoladele:print "{$salut[ 'pranz' ]}, vizitatorule"; // "Buna ziua, vizitatorule"

In acest caz spunem compilatorului sa interpreteze mai intai ce este intre acolade (elementul $salut[ 'pranz' ] din vector) si apoi sa afiseze tot textul. Ori de cate ori e nevoie ca o variabila sa fie interpretata cu prioritate, ea trebuie pusa intre acolade.

Dublu-dolar ($$nume)$obiect = 'masina'; $masina = "Chevrolet"; $avion = "Boeing"; $tren = "TGV"; print $$obiect; // Chevrolet

Pentru a intelege ce se intampla, trebuie mentionat ca ultima linie poate fi scrisa astfel:print ${$obiect}; // Chevrolet

In virtutea explicatiei de mai sus a operatorului {}, putem vedea usor ca PHP mai intai extrage valoarea variabilei $obiect ( care este: "masina" ) si apoi afiseaza variabila $masina (care are valoarea "Chevrolet".

ConstanteConstantele sunt entitati care nu isi schimba valoarea pe parcursul executiei. Sunt utile pentru a recunoaste usor valorile folosite in cod. De exemplu, e mai usor de inteles urmatorul cod, cand se foloseste o constanta decat daca s-ar folosi cifra 5define( 'ZILE_LUCRATOARE', 5); $zile = array( 'luni', 'marti', 'miercuri', 'joi', 'vineri', 'sambata', 'duminica' ); print 'Zilele lucratoare sunt: '; for( $i = 0; $i < ZILE_LUCRATOARE; $i++ ) { print $zile[ $i ] . ' '; }

Asadar constantele de definesc folosind define:define( 'NUME', "Flo" ); define( 'VARSTA', 10 ); define( "ADEVARAT", true );

Este recomandat ca numele constantelor sa fie scris cu majuscule (pentru a fi mai usor identificate) desi nu este obligatoriu. Atunci cand se folosesc, se specifica doar numele, fara ghilimele sau $:print "Ma numesc " . NUME; print " si am " . VARSTA . " ani";

Pentru a verifica daca o constanta este definita, se foloseste functia defined

if( defined( 'NUME' ) ) { print "Ma numesc " . NUME; } if ( !defined( 'VARSTA' ) ) { define( 'VARSTA' , 2 ); } print " Am " . VARSTA . " ani";

Superglobals, variabile specialePHP dispune de cateva variabile "built-in". Acestea sunt pre-populate de PHP in momentul executiei, deci nu trebuie definite sau initializate. Sunt disponibile in orice portiune a codului si in orice script PHP si pot fi folosite fara sa fie nevoie de alte pregatiri. Anumite variabile (ca de exemplu $_POST) au valori doar in anumite situatii (spre exemplu, doar atunci cand sunt folosite formulare). Mai jos sunt descrise pe scurt aceste variabile, cu mentiunea ca in lectiile urmatoare vor fi folosite in exemple din care veti intelege (usor) rostul lor.

$_GET Vector asociativ ce contine parametrii transmisi prin URL. De exemplu, daca pagina noastra PHP se numeste test.php, un URL de genulhttp://localhost/test.php?nume=Alex&varsta=12&ocupatie=elev

ar popula variabila $_GET cu urmatoarele valori:print_r( $_GET ); /* afiseaza: Array ( [nume] => Alex [varsta] => 12 [ocupatie] => elev ) */

Nota: numele parametrilor au rol de cheie in vectorul $_GET. Vectorul $_GET este de asemenea populat la folosirea formularelor GET.

$_POST Similar cu $_GET, doar ca parametrii sunt transmisi prin formulare (forms) vezi lectia "Transmiterea prin formulare (POST)" pentru detalii $_REQUEST Inglobeaza atat $_GET cat si $_POST. $_SESSION Folosita pentru a defini date ce sunt disponibile atata timp cat utilizatorul acceseaza site-ul, indiferent de paginile vizualizate. In mod normal o variabila este definita doar cand un utilizator cere o pagina. La finalul executiei scriptului, valorile variabilelor se pierd (inclusiv variabile $_GET, $_POST, etc). Daca sunt puse in vectorul $_SESSION, valorile pot persista si dupa terminarea executiei scripturilor. $_SERVER Furnizeaza informatii despre server, pagina ceruta si utilizatorul care acceseaza pagina.print_r( $_SERVER ); /* afiseaza ceva asemanator cu ce e mai jos: Array ( [HTTP_COOKIE] => [HTTP_REFERER] => http://php.punctsivirgula.ro/ [HTTP_USER_AGENT] => Mozilla/5.0 (Windows;) Gecko/2008102920 Firefox/3.0.4 [HTTP_HOST] => php.punctsivirgula.ro [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 [HTTP_ACCEPT_LANGUAGE] => ro-ro [HTTP_ACCEPT_CHARSET] => UTF-8,* [HTTP_KEEP_ALIVE] => 300 [HTTP_CONNECTION] => Keep-Alive [SERVER_NAME] => php.punctsivirgula.ro [SERVER_ADMIN] => alexandru @ punctsivirgula . ro [SCRIPT_FILENAME] => /index.php [REMOTE_PORT] => 0 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => /arrays/ [SCRIPT_NAME] => /index.php [PHP_SELF] => /index.php [REQUEST_TIME] => 1000000000 [argv] => Array () [argc] => 0 ) */

$_ENV Afiseaza informatii despre mediul curent in care este instalat si ruleaza interpretorul PHP, despre scriptul curent, etc

$_COOKIES Folosita pentru a vedea elementele de tip Cookies de la site-ul/pagina curenta, disponibile pe calculatorul utilizatorilor. $_FILES Folosita la incarcarea fisierelor pe server (file uploads) - vezi lectia "File upload" pentru mai multe detalii

Desi toate aceste variabile au si nume alternative, este recomandat sa se foloseasca in forma in care au fost prezentate mai sus.

Constante magiceLimbajul PHP dispune de o serie de "constante magice" care au valori diferite in functie de anumiti momentul si codul in care sunt folosite. Denumirea de 'constanta' este improprie, pentru ca, asa cum stiti deja, o constanta nu-si poate schimba valoarea. Nici 'variabile' nu pot fi numite deoarece nu au nevoie de declarare sau initializare, asa ca s-a recurs la un compromis: denumirea 'constante magice' (magic constants). Cele mai uzuale sunt __LINE__, __FILE__, __FUNCTION__ si __CLASS__. Mai noile __DIR__, __METHOD__ si __NAMESPACE__ sunt mai rar folosite datorita faptului ca au nevoie de o versiune mai noua a interpretorului PHP (cel putin versiunea 5.0 sau chiar 5.3) Mai jos sunt explicate aceste constante.

LINE Returneaza linia curenta a scriptului PHP.

FILE Contine calea completa catre scriptul PHP care se executa. Daca este folosita intr-un fisier inclus atunci numele acestui fisier este returnat.

FUNCTION Returneaza numele functie din interiorul careia se foloseste constanta.

CLASS Returneaza numele clasei curente. DIR Contine numele directorului in case este salvat scriptul curent. Aceasta constanta este echivalenta cu dirname(__FILE__). METHOD Contine numele metodei de clasa din care se foloseste constanta. Se poate folosi numai cu clase. NAMESPACE Contine numele spatiului de lucru curent (name-space).

Operatori de comparare$a == $b // egal $a === $b // identic (aceeasi valoare si acelasi tip) $a != $b // diferit $a $b // diferit $a !== $b // ne-identic $a < $b // strict mai mic $a $b // strict mai mare $a >= $b // mai mare sau egal

Exemple:

Atentie! Daca se compara un string (text) cu un numar, stringul este convertit la un numar. Exemplu:"text" == 0 // echivalent 0 == 0, evalueaza la true

Daca se compara 2 stringuri ce contin numere, acestea sunt mai intai convertite la numerele pe care le reprezinta si apoi are loc comparatia. Astfel, 2 texte care sunt diferite ar putea fi considerate egale. Exemplu:"1" == "01" // echivalent 1 == 1, evalueaza la true "1" == "1e0" // echivalent 1 == 1, evalueaza la true

Nota: "01" si "1e0" sunt notatii matematice diferite pentru numarul 1. Diferenta intre operatorii == si = Operatorul == este diferit de operatorul de atribuire = si nu trebuie confundati. Dubluegal (==) este folosit pentru comparare iar egal simplu (=) - pentru atribuirea de valori unei variabile.# $a = 5 este o atribuire. print $a = 5; // 5 # instructiunea print afiseaza rezultatul atribuirii ( rezultatul unei atribuiri este # intotdeauna egal cu valoarea atribuita # $a == 1 este o verificare. Instructiunea afiseaza rezultatul verificarii. print $a == 1; // false

In timp ce atribuirile se pot folosi atat de sine statator ($a = 1;), cat si ca expresii in cadrul instructiunilor (print $a = 1; return $a = 1;) operatorii == sau === sunt folositi doar in cadrul instructiunilor.# corect $a = 10; # atribuire de sine statatoare print $a = 10; # atribuire + afisarea rezultatului atribuirii # incorect - nu genereaza erori dar aceasta constructie este inutila. $a == 1; # nu se face nimic cu rezultatul comparatiei # corect print $a == 1; # se afiseaza rezultatul comparatiei print $a === '1'; # se afiseaza rezultatul comparatiei exacte if( $a == 1 ) echo 'egal'; # se face o verificare

Operatorul ternarPHP ofera un operator care are 3 termeni. Sintaxa lui este urmatoarea:(conditie ? adevarat : fals )

De remarcat ca adevarat, fals si conditie nu sunt instructiuni ci expresii (variabile, constante, stringuri, etc) iar operatorul returneaza o valoare si nu o variabila.print ( 1 == 2 ? 'egal' : 'ne-egal' ); // afiseaza ne-egal

Operatori de incrementare/decrementareIncrementare inseamna cresterea valorii, de obicei cu o unitate, iar decrementarea este operatia inversa. PHP ofera (ca si C/C++) posibilitatea ca incrementarea/decrementarea sa se faca printr-un operator, fara sa fie nevoie de o instructiune separata. Spre exemplu:$a = 1; // pentru a-l creste pe $a cu o unitate, normal am scrie: $a = $a + 1; // folosind operatorul de incrementare scriem: $a++; // sau ++$a; // pentru a afisa noua valoare, putem aplica operatorul direct din instructiunea print: print ++$a;

Dupa cum se poate observa, putem scrie $a++ si ++$a. Diferenta este ca atunci cand ++ apare inainte de variabila, PHP face mai intai incrementarea si apoi returneaza noua valoare. Cand ++ apare dupa, se returneaza valoarea actuala (ne-incrementata) si apoi se creste cu o unitate. Exemplu:$a = 1; print $a++; // afiseaza 1 - mai intai se afiseaza valoarea curenta, dupa care $a devine 2; print $a; // afiseaza 2 - $a are valoarea 2 dupa incrementare; $a = 1 print ++$a; // afiseaza 2 - mai intai $a creste cu o unitate, apoi este afisata noua valoare print $a; // afiseaza 2 - $a are valoarea 2;

Nota: aceleasi observatii (legate de pozitie) se aplica si pentru operatorul de decrementare.$a = 2; print $a--; // afiseaza 2 - mai intai se afiseaza valoarea curenta, dupa care $a devine 1; print $a; // afiseaza 1 - $a are valoarea 1 dupa decrementare; $a = 2 print --$a; // afiseaza 1 - mai intai $a scade cu o unitate, apoi este afisata noua valoare print $a; // afiseaza 1 - $a are valoarea 1;

Operatori de atribuire$a = 1; // atribuire simpla $a $a $a $a += -= *= /= 4; 1; 2; 3; // // // // echivalent echivalent echivalent echivalent cu cu cu cu $a $a $a $a = = = = $a $a $a $a + * / 4; $a are valoarea 5 acum 1; 2; 3;

$a %= 2; // echivalent cu $a = $a % 2; restul impartirii lui $a la 2 $a = &$b; /* $a este o referinta la $b, adica ambele variabile fac referire la aceeasi entitate; daca $a se schimba, se va schimba si $b. Altfel spus, $a este un alias pentru $b */ $s = "Salut"; // atribuire simpla $s .= " straine!"; // echivalent $s = $s . " straine!";

Operatori pentru siruri de caractereIn aceasta categorie sunt inclusi 2 operatori ".=" (operator de atribuire prin concatenare - vezi mai sus) si "." Punctul (.) este operatorul de concatenare (legare) stringuri.print "Text1" . " legat de " . "Text2"; // afiseaza Text1 legat de Text2 $a = "Eu am"; print $a . " mere"; // afiseaza Eu am mere;

Operatori de control al erorilor @Operatorul @ este folosit pentru a suprima erorile sau avertismentele produse de PHP.// $nedefinit = 1; - nu se executa, variabila nu e definita print $nedefinit; // Notice: Undefined variable: nedefinit in file.php on line 120 @print $nedefinit; // nu va genera nici un avertisment / notificare include( "inexistent.php" ); // Warning: include(nedefinit) failed to open... @include( "inexistent.php" ); // nu afiseaza nici un avertisment

Operatii cu variabile. Structuri repetitiveO structura repetitiva este o secventa de cod ce permite realizarea repetata a aceleiasi operatii de un anumit numar de ori. O structura repetitiva este definita de 2 elemente: operatia care este executata si conditia de oprire a executiei. In unele cazuri se cunoaste si numarul de executii. Iata cateva aplicatii care implementeaza anumite tipuri de structuri in PHP:

Aplicatie: sa se defineasca un vector cu x elemente, fiecare element avand valoarea "test". De genul: "test1", "test2", etc.$vector = array(); $x = 10; # operatia: definirea si initializarea unui element al vectorului # conditia de oprire: s-au efectuat $x repetari # nota: in acest caz cunoastem numarul de repetari, dat de variabila $x // intrucat cunoastem cate elemente trebuie definite, folosim structura "for" for( $i = 1; $i