Constructeurs et destructeurs

Constructeurs

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

PHP 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 vous voulez utiliser un constructeur parent, il sera nécessaire de faire appel à parent::__construct().

Exemple 18-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és ascendantes, 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 contient une méthode nommée __construct() et que vous en avez un autre usage.

Destructeurs

void __destruct ( void )

PHP 5 introduit un concept de destructeur similaire aux autres langages orientés objets, comme Java. La méthode destructeur doit être appelée aussitôt que tous les références à un objet particulié sont effacées ou lorsque l'objet est explicitement détruit.

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