Documente Academic
Documente Profesional
Documente Cultură
Dupa cum se observa din exemplul de mai sus, atunci cand sunt definite noi obiecte,
metodele si proprietatile lor pot fi accesate in mod independent pentru fiecare obiect.
Definitia unei clase:
Orice definitie a unei clase incepe prin cuvantul cheie class, urmat de numele clasei.
Acesta poate fi orice sir de caractere, in afara unui cuvant rezervat PHP, fiind
urmat de o pereche de acolade ce include variabilele si functiile clasei.
PHP5 introduce un nou concept care nu este disponibil in PHP4: specificatorii de acces.
Acestia controleaza gradul in care proprietatile obiectelor si metodele lor pot fi
manipulate din exteriorul clasei, avand un rol important in ceea ce priveste securitatea
claselor. Exista trei specificatori de acces, de la cel mai permisiv la cel mai restrictiv:
public, private si protected. In definitia unei clase poti marca gradul de vizibilitate al unei
proprietati sau metode precedand-o cu unul dintre cele trei cuvinte cheie.
In mod implicit, proprietatile si metodele unei clase sunt public. Aceasta inseamna ca ele
pot fi accesate direct si manipulate de catre un script care nu se afla in interiorul clasei.
Daca nu doresti acest lucru, il poti impiedica utilizand specificatorii de acces private sau
protected, in functie de gradul de control pe care vrei sa il detina un script exterior asupra
obiectelor tale. Deoarece in PHP4 nu exista specificatori de acces, definitia clasei de mai
sus nu va functiona in PHP4. In schimb, ea poate fi inlocuita cu urmatorul cod:
Avand in fata exemplul de mai sus, poti deduce usor faptul ca in PHP4 toate proprietatile
si metodele unui obiect sunt public.
Pentru a crea o noua instanta a clasei de mai sus, foloseste cuvantul cheie new:
Codul din exemplul anterior s-ar putea citi ca : "creeaza un nou obiect de tipul Urs si
salveaza-l in variabila $tata_urs".
Acum poti accesa toate proprietatile si functiile clasei Urs folosind aceasta variabila. De
exemplu, codul:
s-ar traduce ca "atribuie valoarea "Tata urs" variabilei $nume a instantei $tata_urs a
clasei Urs", in timp ce declaratia:
In acest caz, prefixul $this indica faptul ca variabila ce urmeaza a fi modificata a fost
definita ca proprietate a clasei. Acest lucru poate fi exprimat ca: "pentru acest obiect,
aduna argumentul functiei mananca() la variabila $greutate". In concluzie, cuvantul
cheie $this iti ofera o metoda facila de a accesa variabilele si functiile "locale" ale clasei.
Iata un exemplu care ilustreaza functionarea sa:
In PHP4, constructorul trebuie sa aiba acelasi nume ca si clasa. Iata codul echivalent
pentru PHP4:
In mod similar, si metodele unei clase pot fi declarate ca private, ceea ce inseamna ca ele
nu pot fi apelate decat din interiorul clasei respective.
Mostenirea unei clase
Doua dintre principalele avantaje ale POO, fie PHP4, fie PHP5, sunt extensibilitatea si
mostenirea. Aceasta inseamna ca poti crea o clasa noua dintr-o clasa deja existenta,
adaugand noi proprietati si metode, si apoi poti defini noi instante ale acestei clase.
Aceste obiecte vor avea toate facilitatile mostenite de la clasa parinte, impreuna cu noile
proprietati si metode ale clasei copil.
Pentru a ilustra acest concept, sa consideram clasa UrsPolar() care mosteneste
clasaUrs() si defineste o noua metoda:
Cuvantul cheie extends este utilizat pentru a crea o clasa copil dintr-o clasa parinte. In
acest mod, toate functiile si variabilele din clasa parinte sunt disponibile in clasa copil,
dupa cum se poate observa in exemplul de mai jos:
In acest caz, apelul final $tom->inoata() va genera o eroare deoarece clasa Urs() nu
contine nici o metoda inoata(). In acelasi timp, instructiunile $bob->alearga() si $bob>vaneaza() vor fi executate cu succes deoarece clasa UrsPolar() mosteneste toate
metodele si proprietatile clasei Urs().
In exemplul anterior, poti observa cum a fost apelat constructorul clasei parinte din
constructorul clasei UrsPolar(). In general, acest lucru este util pentru a ne asigura ca
toate initializarile din clasa parinte au fost efectuate inaintea altor initializari in
constructorul clasei copil. Daca o clasa mostenita nu are constructor, va fi apelat in mod
implicit constructorul clasei pe care o mosteneste.
Iata definitia clasei UrsPolar in PHP4:
Pentru a impiedica mostenirea unei clase sau a unor metode ale sale, foloseste cuvantul
cheie final inaintea numelui clasei sau al metodei (aceasta este o facilitate a PHP5 care nu
este disponibila in versiunile PHP mai vechi). Iata un exemplu care modifica definitia
clasei Urs() astfel incat aceasta sa nu mai poata fi mostenita: