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 19.8. 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.
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.
Exemple 19.9. 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: Le destructeur est appelé durant l'arrêt du script, donc les en-têtes sont toujours déjà envoyés.
Note: Tenter de lancer une exception depuis un destructeur résulte en une erreur fatale.