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

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.

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.