Dupa cum v-am spus in tutorialele anterioare, putem ajunge in situatia in care refolosim o parte din cod, atunci punem partea respectiva in functii pe care le apelam in loc sa dam copy/paste la tot codul respectiv. Dar in momentul in care avem mai multe functii care sunt legate intre ele – exemplu functii pentru administrarea unei baze de date (cautare, editarea unor date sau adaugarea de date noi) putem grupa aceste functii intr-o clasa. Va puteti intreba care sunt avantajele crearii undei clase, cand putem pune functiile direct intr-un fisier pe care sa-l includem mereu. Unul dintre avantaje ar fi datele returnate de functii, in PHP ca in majoritatea limbajelor de programare, o functie de sine statatoare poate intoarce o singura valoare (in Pascal existau procedurile care puteau returna mai multe valori, iar in C++ sau Java trebuie specificat tipul valorii returnate). Prentru a putea prelua mai multe date dintr-o functie o putem integra intr-o clasa si putem folosi elementul cheie $this.
Pe langa functii (metode), clasele pot contine si variabile (atribute), care sunt accesibile unui obiect instantiat din clasa respectiva. Elementul $this, se refera la obiectul curent – inlocuieste numele obiectului, pe care in clasa la creare nu-l stim, ea nefiind instantiata inca.
Deci astfel putem avea, intr-o clasa simpla, urmatoarele:
class Student{
private $nota;
private $id;
private $nume;
private $materia;
public function get_id(){
return $this->id;
}
public function invata($nume){
if($this->nume==$nume){
$this->nota=10;
$this->materia='PHP';
}
}
}
Atat metodele cat si atributele pot fi de 3 feluri, dupa tipul de acces la ele: public, protected si private. Declarate public, inseamna ca ele pot fi apelate oriundem exemplu de apel:
$variabila = Student::get_id();
Private si protected, inseamna ca exista restrictii pentru metoda/atributul respectiv, diferenta fiind ca cele private sunt inaccesibile in afara clasei, iar cele protected sunt accesibile doar claselor derivate din clasa respectiva.
Putem totusi accesa datele prin cele 2 functii, care se mai numesc si setter si getter, si de obicei au prefixul set_ sau get_, functia invata nu este chiar un setter normal, deoarece modifica 2 atribute: nota si materia. De asemenea se poate realiza astfel un getter precum get_atribute, dar care sa returneze de exemplu toate datele din baza de date, pentru id-ul respectiv, exemplu:
public function get_atribute(){
$query = 'SELECT * FROM `student` WHERE `id`="'.$this->id.'"';
$res = mysql_query($query);
while ($row=mysql_fetch_assoc($res)){
$this->nume =$row['nume'];
$this->nota =$row['nota'];
$this->materia =$row['materia'];
}
}
Chiar daca nu apare ca si parametru in functie, este transmis $id prin $this->id. Functia dupa cum se vede returneaza 3 variabile.
In cazul in care dorim ceva mai specific, clasa poate fi extinsa(derivata), de exemplu din Student putem extine o clasa doar pentru cei care sunt la buget.
class Student_la_buget extends Student{
//corpul clasei... cod
}





