Menu
Coddy logo textTech

Destructeur (__destruct)

Fait partie de la section Programmation Orientée Objet du Journey PHP de Coddy — leçon 8 sur 91.

La méthode __destruct est une méthode spéciale qui est appelée automatiquement lorsqu'un objet est détruit. Un objet est détruit lorsqu'il n'y a plus de références à celui-ci ou lorsque le script se termine.

Voici un exemple d'une classe avec à la fois un constructeur et un destructeur :

<?php
class Resource {
    public $name;

    public function __construct($name) {
        $this->name = $name;
        echo $this->name . " was created\n";
    }

    public function __destruct() {
        echo $this->name . " was destroyed\n";
    }
}

Créez un objet et observez le cycle de vie :

echo "=== Start ===\n";
$r = new Resource("Connection");
echo "Using " . $r->name . "\n";
unset($r);  // détruit explicitement l'objet
echo "=== End ===\n";

Sortie :

=== Start ===
Connection was created
Using Connection
Connection was destroyed
=== End ===

La fonction unset() supprime la référence à l'objet, déclenchant immédiatement le destructeur.

Si vous n'appelez pas unset(), le destructeur s'exécute automatiquement lorsque le script se termine :

$r = new Resource("Logger");
echo "Working...\n";
// __destruct est appelé automatiquement à la fin du script

Sortie :

Logger was created
Working...
Logger was destroyed

Point clé : La méthode __destruct est utile pour les tâches de nettoyage telles que la fermeture de fichiers, la libération de ressources ou la journalisation lorsqu'un objet n'est plus nécessaire.

challenge icon

Défi

Moyen

Complétez la classe Resource dans resource.php :

  1. Ajoutez une méthode __construct qui prend $name, le définit comme une propriété et affiche "[name] was created"
  2. Ajoutez une méthode logMessage qui prend $message et affiche "Log: [message]"
  3. Ajoutez une méthode __destruct qui affiche "[name] was destroyed"

Le fichier driver.php testera le cycle de vie de vos objets Resource.

Aide-mémoire

La méthode __destruct est appelée automatiquement lorsqu'un objet est détruit (lorsqu'il n'y a plus de références vers celui-ci ou lorsque le script se termine).

Exemple d'une classe avec constructeur et destructeur :

<?php
class Resource {
    public $name;

    public function __construct($name) {
        $this->name = $name;
        echo $this->name . " was created\n";
    }

    public function __destruct() {
        echo $this->name . " was destroyed\n";
    }
}

La fonction unset() supprime la référence à un objet, déclenchant immédiatement le destructeur :

$r = new Resource("Connection");
unset($r);  // détruit explicitement l'objet

Si unset() n'est pas appelée, le destructeur s'exécute automatiquement à la fin du script.

La méthode __destruct est utile pour les tâches de nettoyage comme la fermeture de fichiers, la libération de ressources ou la journalisation.

Essayez vous-même

<?php
require_once 'resource.php';

$testCase = trim(fgets(STDIN));

if ($testCase == "basic_test") {
    echo "=== Start ===\n";
    $r = new Resource("FileHandler");
    echo "Using " . $r->name . "\n";
    unset($r);
    echo "=== End ===\n";
} elseif ($testCase == "auto_destruct_test") {
    $r = new Resource("Logger");
    $r->logMessage("Application started");
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet