PHP orientat spre obiecte




Clase şi obiecte


În contextul programelor OO , un obiect poate fi aproape orice articol sau concept - un obiect fizic sau un obiect abstract care există doar în program.
Programul orientat spre obiecte este proiectat şi construit ca un set de obiecte independente avînd atribute şi operaţii care interacţionează pentru a realiza cerinţele noastre.Atributele sunt propietaţile sau variabilele care se referă la obiect.Operaţiile sunt metode, acţiuni sau funcţii pe care le poate realiza obiectul fie pentru a se modifica, fie pentru un efect extern.Avantajul principal al programului orientat spre obiecte este capacitatea sa de a accepta şi de a incuraja încapsularea - cuoscută şi sub numele de ascunderea datelor.În primul rând, accesul la datele unui obiect este posibil numai prin operaţiile obiectului, cunoscute sub numele de interfaţa obiectului.
Obiectele pot fi grupate în clase.Clasele reprezintă un set de obiecte care pot diferi de la caz la caz,dar trebuie să aibă anumite lucruri comune.O clasă conţine obiecte care au aceleaşi operaţii care se comportă în acelaşi mod şi au aceleaşi atribute care reprezintă aceleaşi lucruri,deşi valorile acelot atribute vor diferi de la un obiect la altul.




Poliformismul

Un limbaj de programare orientat spre obiecte trebuie să accepte poliformismul , prin care clase diferite pot avea comportamente diferite pentru aceeaşi operaţie.
Poliformismul este mai mult o caracteristică a comportamentelor decât a obiectelor.În PHP , pot fi polimorfice doar funcţiile membre ale unei clase.

Moştenirea

Moştenirea ne permite să creăm o relaţie ierarhică între clase, folosind subclase.O subclasă moşteneşte atributele şi operaţiile de la superclasa ei .
Prin moştenire puteţi construi şi adăuga la clasele existente.Dacă este nevoie, dintr-o clasă de bază simplă puteţi deriva clase şi mai complexe şi mai specializate.Aceasta face codul dumneavoastră mai reutilizabil , ceea ce este unul dintre avantajele importante ale unei abordări orientate spre obiecte.
Utilizarea moştenirii ne poate reduce din muncă dacă operaţiile pot fi scrise doar o singură dată într-o sperclasă în loc să fie scrise de mai multe ori în subclase separate.

Crearea de clase, atribute şi operaţii în PHP

La crearea unei clase în PHP trebuie utilizat cuvậntul cheie class .
Structura unei clase

O definiţie minimală a unei clase arată astfel :

Class nume_clasa
{
}

Pentru a fi utile, clasele noastre au nevoie de atribute şi de operaţii.Atributele le creăm prin declararea variabilelor în definiţia unei clase folosind cuvîntul cheie var .Codul următor va crea o clasa numită nume_clasă avInd două atribute $atribut1 şi $atribut2.

Clasa nume_clasă
{
var $atribut1 ;
var $atribut2 ;
}

Operaţiile le creăm prin declararea funcţiilor în definiţia clasei.Codul următor va crea o clasă numită numeclasă cu două operaţii care nu fac nimic.Operaţia operaţie1() nu primeşte nici un parametru, iar operaţia operaţie2() primeşte doi parametri.

Class numeclasă
{
function operaţie1()
{
}

function operaţie2($param1, $param2)
{
}

}



Constructori

Majoritatea claselor vor avea un tip special de operaţie numit constructor.Un constructor este apelat la crearea unui obiect şi realizează de obicei operaţii utile de iniţilalizare , cum sunt stabilirea atributelor la valori de pornire corespunzătoare sau crearea de alte obiecte necesare acestui obiect.Un constructor este declarat în acelaşi mod cu celelalte operaţii, dar are acelaşi nume cu clasa.Deşi putem apela manual constructorul, scopul său principal este să fie apelat automat cậnd se creează obiect.
Codul următor decalră o clasă cu un constructor :

Class numeclasă
{
function numeclasă ($param)
{
echo "Constructor apelat cu parametrul $param ";
}
}

Instanţierea

După ce am declarat o clasă, trebuie să creăm un obiect - o anumită individualitate care este un membru al clasei - cu care să lucrăm. Acest lucru mai este cunoscut sub denumirea de creare a unei instanţe sau instanţierea unei clase.Creăm un obiect folosind cuvậtul cheie new.Trebuie să specificăm care clasă va fi instanţiată de obiectul nostru şi să oferim parametrii ceruţi de constructorul nostru.

Exemplu :
...
..$a = new numeclasa('Unu');

Utilizarea atributelor clasei

Într-o clasă aveţi acces la o variabilă specială numită $this.Dacă un atribut din clasa curentă se numeşte $atribut, cậnd se atribuie o valoare sau se accesează variabila intr-o operaţie din clasă aceasta se referă prin $this->atribut.

Exemplu : - atribuire valori şi accesarea unui atribut al unei clase :
Class numeclasă
{
var $atribut;
function operaţie($param)
{
$this->atribut = $param;
echo $this->atribut;
}
}
Unele limbaje de programare permit limitarea accesului la atribute prin declararea acestor date ca fiind private sau protejate.Această caracreristică nu este disponibilă în PHP, deci toate atributele şi operaţiile sunt vizibile în afara clasei (adică, toate sunt publice).

Accesarea directă a atributelor din afara clasei nu este o idee bună.Unul dintre avantajele aplicării unei abordări orientate spre obiecte este acela că încurajează încapsularea.În ciuda faptului că în PHP nu se poate impune ascunderea datelor în anumite condiţii se pot obţine aceleaşi avantaje.
Dacă în locul accesării directe ale atributelor unei clase se scrie o funcţie de acces se pot realiza toate accesările printr-o singură secţiune de cod.

Exemplu :
class numeclasa
{
var $atribut;
function get_atribut()
{
return $this->atribut;
}
function set_atribut($valoare_nouă)
{
$this->atribut = $valoare_nouă ;
}
}

Acest cod oferă funcţii pentru accesarea atributului $atribut.Funcţia get_atribut() returnează valoarea existentă în $atribut iar funcţia set_atribut atribuie o valoare nouă variabilei $atribut.Avậnd un singur punct de acces se pot implementa verificări pentru stocarea unor date corespunzătoare.

Apelul operaţiilor unei clase

Operaţiile clasei se pot apela într-un mod asemănător apelului atributelor clasei.Dacă există următoarea clasă :

class numeclasa
{
function operaţie1()
{
}
function operaţie2($param1, $param2)
{
}
}

un obiect de tipul numeclasa numit $a se crează astfel:
$a = new numeclasa();

Operaţiile se apelează in acelaşi mod în care se apelează funcţiile : folosind numele lor si plasậnd între paranteze toţi parametrii de care este nevoie.Deoarece aceste operaţii aparţin unui obiect şi nu sunt funcţii normale, trebuie să se specifice carui obiect îi aparţin.Numele obiectului este folosit în acelaşi mod ca la atributele unui obiect, astfel :

$a->operaţie1();
$a->operaţie2(12, 'test');
Dacă operaţiile returnează ceva, datele returnate se pot captura astfel :
$x = $a->operaţie1();
$y = $a->operaţie2(12, 'test');

Implementarea moştenirii în PHP

În cazul în care o clasă trebuie să fie o subclasă a altei clase, se utilizează cuvîntul cheie extends pentru a specifica acest lucru.Codul următor creează o clasă numită B care moşteneşte de la o clasă A defintă anterior.

class B extends A
{
var $atribut2;
function operaţie2()
{
}
}

În cazul în care clasa A a fost declarată astfel :

class A
{
var $atribut1;
function operaţie1()
{
}
}

toate accesările următoare ale operaţiilor şi atributelor unui obiect de tipul B ar fi corecte:
$b = new B();
$b->operaţie1();
$a->atribut1 = 10;
$a->operaţie2();
$a->atribut2 = 10;
Clasa A nu are operaţia operaţie2() şi nici atributul atribut2.