Menu
Coddy logo textTech

Distruttore (__destruct)

Fa parte della sezione Programmazione orientata agli oggetti del percorso PHP di Coddy. Lezione 8 di 91.

Il metodo __destruct è un metodo speciale che viene chiamato automaticamente quando un oggetto viene distrutto. Un oggetto viene distrutto quando non ci sono più riferimenti ad esso o quando lo script termina.

Ecco un esempio di classe con un costruttore e un distruttore:

<?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";
    }
}

Crea un oggetto e osservane il ciclo di vita:

echo "=== Start ===\n";
$r = new Resource("Connection");
echo "Using " . $r->name . "\n";
unset($r);  // distruggi esplicitamente l'oggetto
echo "=== End ===\n";

Output:

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

La funzione unset() rimuove il riferimento all’oggetto, attivando immediatamente il distruttore.

Se non chiami unset(), il distruttore viene eseguito automaticamente quando lo script termina:

$r = new Resource("Logger");
echo "Working...\n";
// __destruct viene chiamato automaticamente alla fine dello script

Risultato:

Logger was created
Working...
Logger was destroyed

Punto chiave: il metodo __destruct è utile per attività di pulizia come chiudere file, rilasciare risorse o registrare eventi quando un oggetto non è più necessario.

challenge icon

Sfida

Medio

Completa la classe Resource in resource.php:

  1. Aggiungi un metodo __construct che accetta $name, lo imposta come proprietà e lo stampa "[name] was created"
  2. Aggiungi un metodo logMessage che accetta $message e stampa "Log: [message]"
  3. Aggiungi un metodo __destruct che stampa "[name] was destroyed"

Il file driver.php verificherà il ciclo di vita dei tuoi oggetti Resource.

Provalo tu

<?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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore PHP online