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.