Skip to content

Constructeurs et destructeurs ​

Objectifs pédagogiques ​

  • Comprendre le rôle d’un constructeur et d’un destructeur.
  • Initialiser proprement un objet.
  • Gérer les actions à effectuer lors de la destruction d’un objet.

Constructeur (__construct()) ​

Un constructeur est une méthode spéciale appelée automatiquement lors de l’instanciation d’un objet.

Il permet :

  • d'initialiser des propriétés avec des valeurs par défaut ou passées en argument,
  • de préparer l’objet à son utilisation.

Exemple ​

php
<?php

class Product {
    private string $name;

    public function __construct(string $name) {
        $this->name = $name;
    }

    public function getName(): string {
        return $this->name;
    }
}

$product = new Product("Clavier");
echo $product->getName(); // Clavier

Destructeur (__destruct()) ​

Un destructeur est une méthode appelée automatiquement lorsque l’objet est détruit (fin de script ou unset()).

Il permet :

  • de libérer des ressources (fichiers, connexions…),
  • d’enregistrer des logs,
  • ou de faire du nettoyage.

Exemple ​

php
<?php

class Product {
    public function __destruct() {
        echo "L’objet a été détruit";
    }
}

$product = new Product();
// À la fin du script : "L’objet a été détruit"

Utilisation typique du destructeur ​

Les destructeurs sont souvent utilisés pour :

  • fermer un fichier ou une connexion à la base de données,
  • enregistrer une opération de log ou de sauvegarde,
  • afficher un message de confirmation.

Exemple avec fermeture de fichier ​

php
<?php

class Logger {
    private $handle;

    public function __construct(string $filename) {
        $this->handle = fopen($filename, 'a');
    }

    public function write(string $message): void {
        fwrite($this->handle, $message . PHP_EOL);
    }

    public function __destruct() {
        fclose($this->handle);
    }
}

$logger = new Logger("log.txt");
$logger->write("Application lancée.");

Bonnes pratiques ​

  • Un constructeur doit rester simple et ne pas exécuter de logique métier complexe.
  • Un destructeur ne doit pas lancer d’exception, sous peine de générer des erreurs silencieuses.
  • Privilégier les objets avec des valeurs obligatoires passées au constructeur.

Conclusion ​

Les constructeurs garantissent une initialisation fiable et claire des objets, tandis que les destructeurs assurent un nettoyage automatique. Ce sont deux points clés pour un cycle de vie d’objet sain.