Biologie | Chimie | Didactica | Fizica | Geografie | Informatica | |
Istorie | Literatura | Matematica | Psihologie |
1. Introducere
PHP (PHP: Hypertext Prepocessor), cunoscut in versiunile mai vechi si sub numele de PHP/FI (Personal Homepage/Form Interpreter), initial a fost gandit a fi o simpla aplicatie CGI pentru interpretarea formularelor definte prin HTML si procesate de un program scris intr-un limbaj Perl, script shell, executat pe server. In cazul interfetei CGI era necesara permisiunea de a rula programe pe server, ceea ce ducea la lacune in securitate si in plus la disocierea de documentul HTML a programului care procesa datele.
PHP (in versiunea
curenta PHP 4.0) reprezinta un pachet puternic care ofera un
limbaj de programare accesibil din cadrul fisierelor HTML, limbaj
asemanator cu Perl sau C, plus suport pentru manipularea bazelor de
date intr-un dialect SQL (dBase, Informix, MySQL, mSQL, Oracle, PostgreSQL,
Solid, Sybase, ODBC etc.) si acces la sisteme hipermedia precum Hyperwave.
De asemeni, PHP suporta incarcarea fisierelor de pe calculatorul
client: upload (standard propus de
Aceasta aplicatie este disponibila gratuit pe Internet, pentru medii Unix si mai nou pentru medii Windows (inclusiv sursele), integrandu-se in popularul sever Apache.
Istoria PHP-ului incepe la sfarsitul anului 1994, cand Rasmus Lerdorf dezvolta prima versiune, ca proiect personal. PHP-ul este facut public in debutul anului 1995 sub denumirea de Personal Home Page Tools, fiind considerat un analizor simplist care interpreta cateva macrouri ce puteau fi incluse in cadrul documentelor HTML, permitand contorizarea accesului la paginile Web sau accesarea unei carti de oaspeti (guestbook). Analizorul a fost rescris la mijlocul aceluiasi an si denumit PHP/FI 2.0, unde FI era o alta aplicatie scrisa de Rasmus Lenford, un interpreter de formulare HTML. A fost adaugat si suportul pentru bazele de date mSQL si astfel PHP/FI a inceput sa aiba succes, fiind disponibil gratuit pe Web. Se estimeaza ca la sfarsitul lui 1996 cel putin 15 mii de site-uri Web utilizau PHP/FI, iar in anul 1997 numarul acestora era de 50 de mii.
Programatorii Zeev Suraski si Andi Gutmans rescriu analizorul PHP si noua aplicatie formeaza nucleul versiunii PHP 3.0 care include o parte din vechile surse PHP/FI 2.0. Relativ recent, la inceputul anului 2000, a fost facuta publica versiunea PHP 4.0, utilizand puternicul motor de scriptare Zend si oferind suport nu numai pentru servrul Apache ci si pentru alte servere Web. De asemeni, PHP 4.0 ofera posibilitatea accesarii documentelor XML via DOM.
Se estimeaza ca numarul site-urilor care folosesc in prezent PHP este de peste un milion. Deja, pe Web, exista o multitudine de aplicatii si utilitare concepute in PHP, care se regasesc grupate si in asa-numitul PEAR (PHP Extension and Add-on Repository).
PHP este un limbaj de script care functioneaza alaturi de un server Web.
Exemplul 1.1.1 (exemplu introductiv):
<html>Este de notat diferenta cu alte limbaje script CGI scrise in limbaje precum Perl sau C: in loc de a scrie un program cu o multitudine de linii de comanda afisate in final intr-o pagina HTML, veti scrie o pagina HTML cu codul inclus pentru a realiza o actiune precisa (in cazul nostru se va afisa un text).
Codul PHP este inclus intre tag-urile speciale de inceput si de sfarsit care permit utilizatorului sa treaca din 'modul HTML' in 'modul PHP'.
Fata de alte limbaje script, precum Javascript, la PHP codul se executa pe server. Daca pe serverul Web se afla un script similar, clientul nu va primi decat rezultatul executiei scriptului, fara a avea nici o posibilitate de acces la codul care a produs rezultatul. Va puteti configura serverul de Web sa prelucreze (analizeze) toate fisierele HTML ca fisiere PHP. Astfel nu exista nici un mijloc de a distinge paginile care sunt produse dinamic de paginile statice.
Limbajul PHP poseda aceleasi functii ca alte limbaje permitand sa se scrie scripturi CGI, sa colecteze date si sa genereze dinamic pagini web sau sa trimita si sa primeasca cookies.
Marea calitate si cel mai mare avantaj al limbajului PHP este suportul cu un numar mare de baze de date. A realiza o pagina web dinamic cu o baza de date este extrem de simplu. Urmatoarele baze de date sunt suportate de catre PHP: dBase, FrontBase, Sesam, Sybase, Oracle, ODBC, MySQL, . .
Limbajul PHP are deasemenea suport pentru diverse servicii server utilizand protocoale precum IMAP, SNMP, NNTP, POP3 si HTTP
Exista patru moduri pentru a trece de la HMTL la PHP.
Exemplul 2.1.1:
1. <? echo ( 'Cea mai simpla cale de introduceren'); ?>
A doua metoda este cea mai utilizata, pentru ca permite o implementare usoara a PHP-ului cu generatia urmatoare XHTML.
Instructiunile sunt separate, ca in C sau ca in Perl, prin punct si virgula la sfarsitul unei instructiuni. Semnele de sfarsit, '?>', implica sfarsitul instructiunii, deci implicit punct si vigula.
Exemplul 2.1.2:
<?phpComentariile pot fi facute in stilul celor din limbajele C, C++ si shell-urile UNIX (bash de exemplu).
Exemplul 2.1.3:
echo 'Acesta este un test'; // Acesta este un comentariu pe o linie in stil C++Stilul de comentariu pe o linie tine pana la sfarsitul liniei sau al blocului curent al codului PHP.
Exemplul 2.1.4:
<h1>Acesta este un <? # echo 'simplu'; ?> exemplu.</h1>
Variabilele in PHP sunt reprezentate de semnul dolar, '$', in fata numelui variabilei. Numele variabilelor sunt formate dupa aceleasi reguli ca alte etichete din PHP. Un nume de variabila valid trebuie sa inceapa printr-o litera sau liniuta de subliniere, '_', urmata de un sir de litere, cifre sau liniute de subliniere.
PHP este un limbaj case-senzitiv (exemplul 2.3.1).
$var = 'Jean';In PHP 3, variabilele sunt asignate intotdeauna prin valoare. Astfel, cand atribuim unei variabile o expresie, intreaga valoare a expresiei este copiata in variabila destinatie. Aceasta inseamna, de exemplu, ca atribuind unei variabile valoarea altei variabile, modificarea unei variabile nu va avea efect asupra celeilalte.
PHP 4 afera si un alt mod pentru atribuirea de valori variabilelor: prin referinta. Aceasta inseamna ca noua variabila nu face decat sa refere variabila originala (cu alte cuvinte, 'devine un alias pentru' sau 'pointeza la' variabila originala). In acest caz, cele doua variabile sunt interdependente, modificarea uneia determinand modificarea celeilalte. Deoarece nu are loc copierea si actualizarea valorilor, asignarea prin referinta este mai rapida. Diferenta devine notabila in cazul executiilor repetate sau la asignarea tablourilor mari, respectiv a abiectelor.
Pentru a atribui prin
referinta, se introduce un ampersand, '&', in fata
variabilei care este atribuita (variabila sursa). In exemplul
urmator, Numele meu este
Exemplul 2.3.2
$aaa = '
Observatie: numai variabilele pot fi asigante prin referinta.
O functie poate fi definita de utilizator conform sintaxei urmatoare:
function nume_functie( $arg1, $arg2, , $argN)
Intr-o functie poate sa apara orice cod PHP valid, chiar alte functii si definitii de clase.
In PHP3, functiile trebuie sa fie definite inainte de a fi referentiate; in PHP4 nu exista o asemenea restrictie. PHP nu sustine functii de supraincarcare, nu se poate anula definirea sau redefini o functie declarata anterior. PHP3 nu accepta numar variabil de argumente in antetul functiilor, dar accepta argumente implicite.
Informatiile pot fi transmise functiilor print-o lista de argumente. In aceasta lista variabilele si/sau constantele sunt delimitate prin virgula.
PHP accepta transmiterea argumentelor prin valoare (implicit), prin referinta si argumente cu valori implicite. Listele cu numar variabil de argumente sunt acceptate doar in versiunea PHP4. Un efect similar poate fi obtinut in PHP3 transmitand functiei un tablou de argumente.
Exemplu:
function takes_array( $input)
Implicit, argumentele functiilor sunt transmise prin valoare (in sensul ca schimbarea valorii argumentului in interiorul functiei nu se reflecta si in afara functiei). Daca doriti sa permiteti unei functii sa modifice argumentele sale, acestea trebuie transmise prin referinta.
Daca vreti ca un argument al unei functii sa fie transmis prin referinta, trebuie sa precedati cu un '&' numele argumentului in definitia functiei, ca in exemplul de mai jos
(exemplul 2.8.1):
function add_some_extra( &$string)
Daca vreti sa transmiteti o variabila prin referinta unei functii care nu face acest lucru in mod implicit, trebuie sa precedati cu un '&' numele argumentului in apelul functiei
(exemplul 2.8.2):
function my_function( $string)
O clasa este o colectie de variabile si de functii care utilizeaza aceste variabile. O clasa se defineste utilizand urmatoarea sintaxa:
class CartConstructia de mai sus defineste o clasa Cart formata dintr-un tablou asociativ de articole si doua functii pentru a adauga si a elimina articole din tablou.
Nota: in PHP4 sunt permisi doar initializatori constanti pentru variabile var. Pentru initializatorii neconstanti trebuie folositi constructori.
Acest exemplu nu va functiona PHP4 */Clasele sunt tipuri. Pentru a crea o variabila de tipul dorit se foloseste operatorul new.
Acest cod creaza un obiect $cart din clasa Cart. Functia add_item() a acestui obiect este apelata pentru a adauga un articol cu numarul 10 in tabloul $cart->items.
Clasele pot fi extensii ale altor clase. Aceasta notiune se numeste mostenire. Clasa extinsa sau derivata poseda toate variabilele si functiile clasei de baza alaturi de variabilele si functiile definite in extensie. Acest lucrul se realizeaza utilizand cuvantul cheie extends. Mostenirea multipla nu este acceptata.
class Named_Cart extends CartCodul de mai sus defineste o clasa Named_Cart care are toate variabilele si functiile din Cart plus o variabila suplimentara $owner si o functie suplimentara set_owner(). Puteti crea un obiect $ncart cu operatorul new si apoi puteti seta proprietatile obiectului.
Exemplu:
$ncart = new Named_Cart; // Creaza un nou obiectIn functiile unei clase variabila $this inseamna obiectul curent. Pentru a accesa o variabila sau functie a obiectului curent, numita $proba, trebuie sa utilizam constructia $this->proba. Atat in interiorul cat si in afara obiectului, nu este necesar semnul '$' ( in fata unei 'proprietati') cand accesati o proprietate a acestuia.
Exemplu:
$ncart->owner = 'Chris'; // Fara $ in fata proprietatii $ownerConstructorii sunt functiile dintr-o clasa care au acelasi nume cu clasa. Ei sunt automat apelati cand creati o noua instanta a clasei.
class Auto_Cart extends CartAcest cod defineste o clasa Auto_Cart care extinde clasa Cart plus un constructor care initializeaza obiectul cu un articol, avand numarul 10 de fiecare data cand un nou obiect de tipul Auto_Cart este creat cu operatorul new.
Constructorii pot avea argumente (pot fi optionale), caracteristica care ii face foarte utili.
class Constructor_Cart extends CartIn PHP referintele reprezinta posibilitatea de a referi continutul unei variabile prin nume diferite. In PHP numele unei variabile difera de continutul variabilei, deci un anumit continut poate fi identificat prin nume diferite.
Referintele PHP permit referirea aceluiasi continut prin doua variabile diferite. Cand scrieti:
$a = &$b;inseamna ca $a si $b indica aceeasi variabila.
Al doilea lucru pe care il realizeaza referintele este sa transmita variabile prin referinta. Acest lucru se realizeaza folosind variabila locala a functiei si variabila cu care se face apelul drept referinte catre acelasi continut.
Exemplu:
function fct( &$var)Apelul de mai sus va duce la obtinerea valorii 6 in variabila $a. Acest lucru se intampla deoarece in functia fct() variabila $var refera acelasi continut ca si variabila $a.
Al treilea lucru pe care il pot face referintele este intoarcerea unei valori prin referinta.
Referintele nu sunt pointeri. Astfel, urmatoarea constructie nu va intoarce rezultatul asteptat:
function fct( &$var)In momentul apelului $var va intra in corespondenta cu $bar din apelator, dar va fi redirectata catre $GLOBALS[ 'baz'].
Intoarcerea prin referinta este utila cand doriti sa utilizati functii pentru a gasi variabile care ar trebui legate cu acestea. Cand returnati referinte folositi sintaxa:
function &find_var( $param)In acest exemplu proprietatea obiectului returnat de functia find_var() trebuie setata, nu copia acesteia cum s-ar intampla daca nu am utiliza sintaxa prin referinta.
Observatie: spre deosebire de transmiterea parametrilor, trebuie sa utilizati '&' in ambele locuri pentru a indica ce intoarceti prin referintaa (si nu prin valoare cum este uzual) si pentru a spune cui i se atribuie respectiva referinta.
Cand resetati o referinta rupeti practic legatura dintre numele si continutul variabilei. Aceasta nu inseamna ca acel continut al variabilei va fi distrus.
Exemplu:
$a = 1;Secventa de cod de mai sus nu va reseta $b ci numai variabila $a.
Multe constructii sintactice in PHP sunt implementate prin mecanismul referintelor, deci modul lor de functionare se poate aplica acestor constructii. Unele constructii, cum ar fi transmiterea si intoarcerea prin referinta, au fost deja mentionate. Alte constructii care folosesc referintele sunt referintele globale. Cand declarati variabila $var ca variabila globala creati defapt o referinta la o variabila globala. Semnificatia este aceeasi cu :
$var = &$GLOBALS[ 'var'];Aceasta inseamna, spre exemplu, ca, resetarea variabilei $var nu va reseta si variabila globala asociata.
Intr-o metoda obiectuala $this refera intotdeauna obiectul apelator.
Copyright © 2024 - Toate drepturile rezervate