Constructeurs et destructeurs

Constructeurs

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

PHP 5 permet aux d�veloppeurs de d�clarer des constructeurs pour les classes. Les classes qui poss�dent une m�thode constructeur appellent cette m�thode � chaque cr�ation d'une nouvelle instance de l'objet, ce qui est int�ressant pour toutes les initialisations dont l'objet a besoin avant d'�tre utilis�.

Note: Les constructeurs parents ne sont pas appel�s implicitement si la classe enfant d�finie un constructeur. Si vous voulez utiliser un constructeur parent, il sera n�cessaire de faire appel � parent::__construct().

Exemple #1 Exemple d'utilisation des nouveaux constructeurs unifi�s

<?php
class BaseClass {
    function 
__construct() {
        print 
"In BaseClass constructor\n";
    }
}

class 
SubClass extends BaseClass {
    function 
__construct() {
        
parent::__construct();
        print 
"In SubClass constructor\n";
    }
}

$obj = new BaseClass();
$obj = new SubClass();
?>

Pour des raisons de compatibilit� ascendante, si PHP 5 ne peut pas trouver une fonction __construct() pour une classe donn�e, il cherchera une fonction constructeur repr�sent�e, comme dans l'ancien style (PHP < 5), par le nom de la classe. Effectivement, cela signifie que le seul cas o� il pourrait y avoir un probl�me de compatibilit� est celui o� votre classe contiendrait une m�thode nomm�e __construct() et que vous en ayez un autre usage.

Destructeurs

void __destruct ( void )

PHP 5 introduit un concept de destructeur similaire aux autres langages orient�s objet, comme le C++. La m�thode destructeur doit �tre appel�e aussit�t que toutes les r�f�rences � un objet particulier sont effac�es ou lorsque l'objet est explicitement d�truit ou dans n'importe quel ordre de la s�quence d'arr�t.

Exemple #2 Exemple avec un Destructeur

<?php
class MyDestructableClass {
    function 
__construct() {
        print 
"In constructor\n";
        
$this->name "MyDestructableClass";
    }

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

$obj = new MyDestructableClass();
?>

Tout comme le constructeur, le destructeur parent n'est pas appel� implicitement par le moteur. Pour ex�cuter le destructeur parent, vous devez appeler explicitement la fonction parent::__destruct dans le corps du destructeur.

Note: Les destructeurs appel�es durant l'arr�t du script ont d�j� envoy�s les en-t�tes HTTP. Le dossier de travail dans la phase du script d'arr�t peut �tre diff�rent avec d'autres APIs (e.g. Apache).

Note: Tenter de lancer une exception depuis un destructeur (appel� � la fin du script) �met une erreur fatale.