Menu
Coddy logo textTech

Destructor (__destruct)

Parte de la sección Programación Orientada a Objetos del Journey de PHP de Coddy — lección 8 de 91.

El método __destruct es un método especial que se llama automáticamente cuando un objeto es destruido. Un objeto se destruye cuando no hay más referencias a él o cuando el script finaliza.

Aquí hay un ejemplo de una clase con un constructor y un destructor:

<?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 objeto y observa el ciclo de vida:

echo "=== Start ===\n";
$r = new Resource("Connection");
echo "Using " . $r->name . "\n";
unset($r);  // destruir explícitamente el objeto
echo "=== End ===\n";

Salida:

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

La función unset() elimina la referencia al objeto, activando el destructor inmediatamente.

Si no llamas a unset(), el destructor se ejecuta automáticamente cuando el script finaliza:

$r = new Resource("Logger");
echo "Working...\n";
// __destruct se llama automáticamente al final del script

Salida:

Logger was created
Working...
Logger was destroyed

Punto clave: El método __destruct es útil para tareas de limpieza como cerrar archivos, liberar recursos o realizar registros cuando un objeto ya no es necesario.

challenge icon

Desafío

Intermedio

Completa la clase Resource en resource.php:

  1. Agrega un método __construct que reciba $name, lo asigne como una propiedad e imprima "[name] was created"
  2. Agrega un método logMessage que reciba $message e imprima "Log: [message]"
  3. Agrega un método __destruct que imprima "[name] was destroyed"

El archivo driver.php probará el ciclo de vida de tus objetos Resource.

Hoja de referencia

El método __destruct se llama automáticamente cuando un objeto es destruido (cuando no hay más referencias a él o cuando el script finaliza).

Ejemplo de una clase con constructor y destructor:

<?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 función unset() elimina la referencia a un objeto, activando el destructor inmediatamente:

$r = new Resource("Connection");
unset($r);  // destruir explícitamente el objeto

Si no se llama a unset(), el destructor se ejecuta automáticamente cuando el script termina.

El método __destruct es útil para tareas de limpieza como cerrar archivos, liberar recursos o registrar eventos.

Pruébalo tú mismo

<?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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos