OOP (Object Oriented Programming - Programare Orientata pe obiecte) este un concept (sau tehnica) de programare care trateaza datele si functiile ca obiecte. Important la acest concept este sa fie inteleasa bine diferenta dintre Clasa (Class) si Obiect (Object).
Inainte de a trece la lucruri practice, iata cate ceva teoretic despre OOP.
• Clasa este o structura de date compacta, care contine variabile (numite proprietati) si functii (numite metode) prin care se pot crea diferite instructiuni legate intre ele in acea structura.
• Obiectele sunt elementele din script create cu o clasa, si prin care se pot folosi proprietatile si metodele din acea clasa.
- De exemplu, pentru a intelege mai bine, prin analogie, o Clasa poate fi asemanata cu planul /schita unei case, iar obiectul este insasi casa, si contine proprietatile (culoare, ferestre, etc.) definite in schita. Precum, folosind acelasi plan se pot construi mai multe case, asa si in OOP, folosind aceeasi clasa se pot crea unul sau mai multe obiecte prin care se aplica in script proprietatile si functiile definite in clasa.
Practic, o clasa este o "fabrica" de obiecte, prin care se creaza obiecte cu aceeasi structura, avand proprietati si metode identice. Fiecare astfel de obiect creat poarta denumirea de Instanta a clasei.
Pentru cine este obijnuit cu modul de creare a claselor in PHP 4, incepand de la versiunea PHP 5 sunt unele schimbari de sintaxa:
- Proprietatile nu se mai declara cu var
- Metoda Constructor se defineste cu numele __construct
Definirea unei clase incepe cu un cuvantul cheie "class", urmat de numele clasei si corpul ei (cuprins intre acolade). In corpul clasei se definesc proprietatile si metodele ei.
- Proprietatile sunt variabile definite in interiorul clasei.
- Metodele sunt functii create in interiorul clasei.
Structura general de alcatuire a unei clase este urmatoarea:
<?php // Se defineste clasa SiteClas class SiteClas { public $site = 'marplo.net/'; // Proprietatea publica private $categorie = 'php-mysq/'; // Proprietate privata // Creare metoda, preia un argument public function pagini($pag) { // Afiseaza adresa URL formata din valoarea celor 2 proprietati si argumentul primit echo '<br />'. $this->site. $this->categorie. $pag; } } ?>- Aceasta este clasa "SiteClas", pentru a-o putea folosi in orice script, sa o salvam intr-un fisier separat, denumit "class.SiteClas.php".
Cand se acceseaza proprietati se foloseste un singur caracter $. Sintaxa este $obj->proprietate, desi variabila e definita "$proprietate".
Dupa ce o clasa e creata, pentru a putea fi utilizata trebuie creata o instanta de obiect a clasei. Aceasta instanta se declara in scriptul PHP, cu formula:
$nume_obiect = new Nume_Clasa();
- "nume_obiect" este numele obiectului prin care pot fi utilizate proprietatile si metodele acelei clase.
<?php include('class.SiteClas.php'); // Include clasa $objSite = new SiteClas(); // Creare instanta de obiect la clasa SiteClas echo $objSite->site; // Afisaza valoarea proprietatii "site" // Apeleaza metoda pagini() [cu un argument, dupa cum a fost definita] $objSite->pagini('oop-clase-obiecte.html'); // Modifica valoarea proprietatii "site" si apeleaza iar metoda pagini() $objSite->site = 'www.alt-site.net/'; $objSite->pagini('oop-clase-obiecte.html'); ?>- La include() trebuie adaugata calea si numele fisierului cu clasa, in raport cu scriptul curent (aici sunt in acelasi director).
Valoarea data unei proprietati definita in clasa poate fi de orice tip: sir (string), numar, Array sau Object.
Metoda constructor e un tip special de functie din interiorul Clasei. Se declara cu numele __construct (doua caractere "_" in fata). Aceasta metoda este mereu "public" chiar daca nu se mentioneaza special atributul "public". Diferenta fata de celelalte functii este aceea ca Metoda Constructor e apelata automat cand se creaza o instanta la clasa respectiva, codul din ea se executa in momentul cand e creat obiectul (cu new).
<?php // Se defineste clasa SiteClas class SiteClas { public $site = 'marplo.net/'; // Proprietate publica private $categorie = 'php-mysq/'; // Proprietate privata // Definire metoda constructor public function __construct($nume) { // Afiseaza un mesaj de bun venit, incluzand proprietatea "site" echo 'Bine ai venit '. $nume. ' pe '. $this->site. '<br />'; echo $this->Mesaj(); // adauga si ce returneaza metoda Mesaj() } // Metoda protected protected function Mesaj() { // Returneaza un mesaj cu proprietatea 'categorie' return 'Categoria de cursuri '. $this->categorie; } // Creare metoda, preia un argument public function pagini($pag) { // Afiseaza adresa URL formata din valoarea celor 2 proprietati si argumentul primit echo '<br />'. $this->site. $this->categorie. $pag; } } ?>- Deoarece Metoda Constructor preia un parametri ($nume) [se pot adauga mai multi, ca la orice functie], cand se creaza o instanta la aceasta clasa trebuie sa fie adaugat si un argument.
<?php include('class.SiteClas.php'); // Include clasa // Creare instanta de obiect la clasa SiteClas, cu argumentul necesar $objSite = new SiteClas('Marius'); ?>- Prin executia metodei "__construct()", apelarea $this->Mesaj() determina si executia metodei Mesaj(), care avand atribut "protected" poate fi apelata doar in codul din corpul clasei sau alte clase extinse din ea (despre clase extinse intr-o lectie viitoare).
Dupa cum se arata in exemplu de sus, in metoda constructor pot fi apelate si alte metode sau proprietati definite in clasa, cu sintaxa $this-> , fapt ce va face ca si acele metode sa fie executate cand e creat obiectul.
- Daca se apeleaza in script (in afara clasei) o metoda "protected" sau "private" (de ex., aici: $objSite->Mesaj();) va genera eroare.
<?php class Test { // Constructor (cu un parametru cu valoare predefinita) public function __construct($nume='Tu') { echo '<br />Salut '. $nume; } } ?>- Daca instanta e creata fara argument, metoda constructor va folosi parametru $nume cu valoarea lui prestabilita ("Tu"), iar cand e adaugat argument, preia valoarea acestuia; dupa cum arata rezultatul afisat de scriptul urmator, in care se creaza doua instante de obiect la clasa Test.
<?php // Creare instanta de obiect la clasa Test, fara argument $obj1 = new Test(); // A doua instanta de obiect la clasa Test, cu argument $obj2 = new Test('Marius'); ?>- Acest exemplu arata si faptul ca se pot crea si folosi mai multe instante de obiect la aceeasi clasa.
<ul> <li>http://coursesweb.net/html/</li> <li>http://www.marplo.net/html/</li> </ul>
.some_class { display: list-item; }
var obj = { "courses": ["php", "javascript", "ajax"] }; var jsonstr = JSON.stringify(obj); alert(jsonstr); // {"courses":["php","javascript","ajax"]}
$strhtml = '<body><div id="dv1">CoursesWeb.net</div></body>'; $dochtml = new DOMDocument(); $dochtml->loadHTML($strhtml); $elm = $dochtml->getElementById("dv1"); echo $elm->nodeValue; // CoursesWeb.net
I`m living here. - Traiesc /Locuiesc aici.
Estoy viviendo aquí. - Traiesc /Locuiesc aici.