Les classes et les objets
PHP Manual

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

A la différence des autres méthodes, PHP ne génèrera pas d'erreur de niveau E_STRICT lorsque __construct() est surchargé avec des paramètres différents du constructeur parent.

Depuis PHP 5.3.3, les méthodes ayant le même nom que la classe dans laquelle elle se trouve ne sont plus traitées comme des constructeur, si la classe considérée se situe dans un espace de noms. Ceci n'affecte pas les classes sans espace de noms.

Exemple #2 Constructeurs dans les classes dans des espaces de noms

<?php
namespace Foo;
class 
Bar {
    public function 
Bar() {
        
// Traitée comme un constructeur dans PHP 5.3.0-5.3.2
        // Traitée comme une méthode normale depuis PHP 5.3.3
    
}
}
?>

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 est 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 #3 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.

Le destructeur sera appelé même si l'exécution du script est stoppé en utilisant la fonction exit(). Appeler la fonction exit() dans un destructeur permettra de ne pas exécuter les autres routines d'arrêt.

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.


Les classes et les objets
PHP Manual