E-learn.ro
Panou utilizatori
Utilizator Parola
Creeaza cont nou    Recupereaza parola
Login
Newsletter
Introdu adresa ta de email
Inscrie-te
Inchide panoul de utilizatori
Add to Google

Tutoriale PHP

Descarca toolbar

Toolbar E-learn.ro Facebook Twitter

WEB DEVELOPMENT  /  PHP  /  Introducere in PHP (24)

VII. Clase si obiecte

29.05.2008
VII. Clase si obiecte

Pe parcursul acestui tutorial, vei putea citi despre capacitatile PHP in legatura cu implementarea obiectelor (atat in PHP 4 cat si in PHP 5) si vei putea urmari diverse exemple si explicatii ce ilustreaza utilizarea lor.

Total vizualizari: 17056 17056 afisari   |   Comentarii  7   |   Rating   |   (13 voturi)   |   Timp necesar: 20 min 20 min   |   Nivel de cunostiinte necesar: Incepator  Incepator

Sursa:  Zend.com  
Autor:  Vikram Vaswani
Adauga la tutoriale favorit Adauga la tutoriale favorite
Pagina:
« 1234 5
comenteaza printeaza

Restrictionarea accesului
Dupa cum am precizat mai sus, PHP5 permite marcarea proprietatilor si metodelor unei clase ca private, ceea ce inseamna ca ele nu pot fi modificate sau afisate in afara definitiei clasei respective. Acest lucru este util a impiedica manipularea proprietatilor unei clase de catre o instanta a acesteia. Sa consideram urmatorul exemplu, care ilustreaza acest lucru prin adaugarea unei noi variabile private $_ultimeleUnitatiConsumate in clasa Urs():

<?php 
// PHP 5 
// definitia clasei 
class Urs { 
    // definitia proprietatilor 
    public $nume; 
    public $greutate; 
    public $varsta; 
    private $_ultimeleUnitatiConsumate; 
    // constructor 
    public function __construct() { 
        $this->varsta = 0; 
        $this->greutate = 100; 
        $this->_ultimeleUnitatiConsumate = 0; 
    } 
     // definitia metodelor 
    public function mananca($unitati) { 
        echo $this->nume." mananca ".$unitati." unitati de mancare... "; 
        $this->greutate += $unitati; 
        $this->_ultimeleUnitatiConsumate = $unitati; 
    } 
    public function afiseazaUltimaMasa() { 
        echo "Unitatile consumate la ultima masa 
        au fost ".$this->_ultimeleUnitatiConsumate." "; 
    } 
} 
?>

Deoarece variabila $_ultimeleUnitatiConsumate este declarata ca private, orice tentativa de a o modifica va genera o eroare. Iata un exemplu:

<?php 
$bob = new Urs; 
$bob->nume = "Ursul Bobby"; 
$bob->mananca(100); 
$bob->mananca(200); 
echo $bob-> afiseazaUltimaMasa(); 
// urmatoarea linie va genera o eroare 
$bob->_ultimeleUnitatiConsumate = 1000; 
?>

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 clasa Urs() si defineste o noua metoda:

<?php 
// PHP 5 
// definitia clasei
class Urs { 
    // definitia proprietatilor
    public $nume; 
    public $greutate; 
    public $varsta; 
    public $sex; 
    public $culoare; 
    // constructor 
    public function __construct() { 
        $this->varsta = 0; 
        $this->greutate = 100; 
    }
    // definitia metodelor
    public function mananca($unitati) { 
        echo $this->nume." mananca ".$unitati." unitati 
        de mancare... "; 
        $this->greutate += $unitati; 
    }
    public function alearga() { 
        echo $this->nume." alearga... "; 
    } 
    public function vaneaza() { 
        echo $this->nume." vaneaza... "; 
    } 
    public function doarme() { 
        echo $this->nume." doarme... "; 
    } 
} 
// extindem definitia clasei Urs 
class UrsPolar extends Urs { 
    // constructor 
    public function __construct() { 
        parent::__construct(); 
        $this->culoare = "alb"; 
        $this->greutate = 600; 
    } 
    // definitia metodelor 
    public function inoata() { 
        echo $this->nume." inoata... "; 
    } 
} 
?>

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:

<?php 
// creeaza o noua instanta a clasei Urs() 
$tom = new Urs; 
$tom->nume = "Ursul Tommy"; 
// creeaza o noua instanta a clasei UrsPolar() 
$bob = new UrsPolar; 
$bob->nume = "Ursul Bobby"; 
/* $bob poate apela toate metodele claselor Urs() si UrsPolar() */
$bob->alearga(); 
$bob->vaneaza(); 
$bob->inoata(); 
// $tom poate apela doar metodele clasei Urs() 
$tom->alearga(); 
$tom->vaneaza(); 
$tom->inoata(); 
?>

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:

<?php 
// PHP 4 
// UrsPolar extinde definitia clasei Urs 
class UrsPolar extends Urs { 
    // constructor 
    function UrsPolar() { 
        parent::Urs(); 
        $this->culoare = "alb"; 
        $this->greutate = 600; 
    } 
    // definitia metodelor 
    function inoata() { 
        echo $this->nume." inoata... "; 
    } 
} 
?>

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:

<?php 
// PHP 5 
// definitia clasei 
final class Urs { 
    // definitia proprietatilor 
 
    // definitia metodelor
} 
/* extinderea definitiei clasei va genera o eroare 
   deoarece clasa Urs nu poate fi mostenita */
class UrsPolar extends Urs { 
   // definitia metodelor 
} 
// crearea unei instante a clasei UrsPolar() 
// apelul va esua deoarece clasa Urs nu poate fi mostenita  
$bob = new UrsPolar; 
$bob->nume = "Ursul Bobby"; 
echo $bob->greutate; 
?>
Pagina:
« 1234 5
comenteaza printeaza
Alte tutoriale PHP:
Noteaza acest tutorial
Rating tutorial
 
(13 voturi)
Pentru a nota acest tutorial, trebuie sa fii logat!
COMENTARII (7) spune-ti parerea
e-learn , Joi, 25 Iunie 2009
#7

Re: miha
Apreciem eforturile tale de a "sparge" site-ul, dar aceeasi smecherie nu va functiona de doua ori. Asa ca ori inventezi ceva nou, ori ar trebui sa renunti la glume si sa lasi loc celor care chiar isi doresc sa invete ceva din aceste tutoriale. Datorita celor ca tine, utilizatorii bine intentionati nu pot posta intrebari ce includ cod. Oricum, si noi am invatat ceva din aceasta experienta si iti multumim!

Raporteaza acest comentariu ca injurios!
miha , Miercuri, 24 Iunie 2009
#6

atac

Raporteaza acest comentariu ca injurios!
Drugg , Marti, 17 Martie 2009
#5

bravo autorul !!! Acum anumite lucruri au devenit mai clare pt mine :)

Raporteaza acest comentariu ca injurios!
pesos , Vineri, 19 Decembrie 2008
#4

e bun tutorialul dar ar mai fi ceva la constructori mai multe de explicat in rest e foarte bun ii multumesc autorilor pt material si daca se poate sa-l mai completati

Raporteaza acest comentariu ca injurios!
Dani , Joi, 07 August 2008
#3

O fi mediu, dar nimeni nu se naste invatat, multumiri autorilor, atat cat e mi-a folosit.

Raporteaza acest comentariu ca injurios!
Tronaru Mioara , Luni, 21 Iulie 2008
#2

Este un tutorial f.bun - cu ajutorul caruia mi-am clarificat multe probleme.Excelent!

Raporteaza acest comentariu ca injurios!
sacue , Luni, 02 Iunie 2008
#1

Legat de nivelul acestui tutorial, cred ca mai potrivit ar fi fost "Mediu". Conceptul de obiect cam aici se incadreaza ...


Parerea mea ....

Raporteaza acest comentariu ca injurios!
Posteaza un comentariu
Pentru a posta un comentariu, trebuie sa fii logat!
0 TOP UTILIZATORI* 0 0
Tutoriale scrise de claibornelara
claibornelara Rang utilizator claibornelara - Incepator
5195
Tutoriale scrise de mcuemica
mcuemica Rang utilizator mcuemica - Incepator
5150
Tutoriale scrise de ellarichards
ellarichards Rang utilizator ellarichards - Incepator
5000
Tutoriale scrise de emonclercheap
emonclercheap Rang utilizator emonclercheap - Incepator
4975
Tutoriale scrise de beacherrosa
beacherrosa Rang utilizator beacherrosa - Incepator
4735
* Acest top reprezinta punctajele acumulate in ultimele 30 de zile.
RoR Flash Gimp Word Action Script Illustrator XML Dreamweaver CSS Java JSON HTML Fireworks Outlook Python Vista COREL DRAW Swift 3D Ruby on Rails Verilog Lightroom Fotografie Photoshop PHP Javascript Excel AJAX XHTML Powerpoint PSD StyleSheet SEO SWF MySQL Sony Vegas Bridge
Promovare:
Daca faci parte din comunitatea E-learn.ro si doresti promovarea acesteia, poti accesa pagina de promovare.
Arhiva newsletter:
Daca ai ratat un numar mai vechi, sau vrei sa revezi care au fost noutatile E-learn.ro la un moment dat, poti accesa arhiva de newslettere.
  Copyright © 2008-2013 E-LEARN.ro. Toate drepturile rezervate. Termeni si conditii.
Conceput si realizat de Neokinetics Software