Clase și Obiecte
PHP Manual

Constructori și Destructori

Constructor

void __construct ([ mixed $args [, $... ]] )

PHP 5 permite programatorilor să definească constructori pentru clase. Clasele care au definit un constructor vor apela această metodă la fiecare obiect nou creat, pentru ca acesta (obiectul) să fie utilizabil pentru inițializare înante de a fi folosit.

Notă: Constructorul-părinte nu este apelat implicit dacă clasa-fiică definește un constructor. Pentru a apela un constructor-părinte, este necesar de a apela parent::__construct() din cadrul constructorului-fiu.

Example #1 utilizarea noilor constructori unificați

<?php
class ClasaDeBaza {
   function 
__construct() {
       print 
"Sunt în contructorul clasei: ClasaDeBaza\n";
   }
}

class 
ClasaExtinsa extends ClasaDeBaza {
   function 
__construct() {
       
parent::__construct();
       print 
"Sunt în constructorul clasei: ClasaExtinsa\n";
   }
}

$obj = new ClasaDeBaza();
$obj = new ClasaExtinsa();
?>

Pentru compatibilitate cu versiunile mai vechi, dacă PHP 5 nu găsește funcția __construct() pentru o clasă, va căuta în formatul vechi o funcție care are chiar numele clasei. Drept urmare, singura neconcordanță în compatibilitate va fi atunci când ați folosit în clase funcția __construct() pentru alte scopuri decât inițializarea obiectului.

Spre deosebire de alte metode, PHP nu va genera un mesaj de eroare de nivel E_STRICT atunci când __construct() este suprascrisă cu alți parametri decât cei ai metodei __construct() din clasa-părinte.

Începând cu PHP 5.3.3, metodele cu același nume ca și ultimul element al unei clase din spațiul de nume nu vor mai fi tratate ca constructor. Această schimbare nu afectează clasele fără spații de nume.

Example #2 Constructori în clasele cu spații de nume

<?php
namespace Foo;
class 
Bar {
    public function 
Bar() {
        
// tratată ca constructor în PHP 5.3.0-5.3.2
        // tratată ca o metodă obișnuită începând cu PHP 5.3.3
    
}
}
?>

Destructori

void __destruct ( void )

PHP 5 introduce un concept de distrugere a unui obiect similar cu cel regăsit în alte limbaje de programare orientate pe obiecte (C++). Metoda de distrugere va fi apelată imediat ce nu mai sunt careva referințe către un anumit obiect sau în orice ordine în timpul secvenței de deconectare.

Example #3 Exemplu destructor

<?php
class ClassaCuDestructor {
   function 
__construct() {
       print 
"Sunt în constructor.\n";
       
$this->name "ClassaCuDestructor";
   }

   function 
__destruct() {
       print 
"Distrug " $this->name "\n";
   }
}

$obj = new ClassaCuDestructor();
?>

La fel ca la constructori, destructorii-părinti nu vor fi apelați implicit. Pentru a apela destructorul-părinte trebuie să apelați explicit parent::__destruct() în destructorul descendent.

Destructorul este apelat chiar dacă scriptul este terminat cu apelul la funcția exit(). Apelând exit() într-un destructor va preveni apelarea tuturor rutinelor de terminare din scriptul respectiv.

Notă:

Destructorii apelați la momentul terminării execuției scriptului au antetele HTTP trimise deja. Directorul de lucru în timpul fazei de deconectare a scriptului poate să difere în cazul anumitor SAPI-uri (de ex. Apache).

Notă:

Încercarea de a arunca o excepție dintr-un destructor (apelat la momentul terminării execuției scriptului) va cauza o eroare fatală.


Clase și Obiecte
PHP Manual