Constructeurs et destructeurs
Constructeurs
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
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.