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 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.
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.
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.