Menu
Coddy logo textTech

Destrutor (__destruct)

Parte da seção Programação Orientada a Objetos do Journey de PHP da Coddy — lição 8 de 91.

O método __destruct é um método especial que é chamado automaticamente quando um objeto é destruído. Um objeto é destruído quando não há mais referências a ele ou quando o script termina.

Aqui está um exemplo de uma classe com um construtor e um destrutor:

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

Crie um objeto e observe o ciclo de vida:

echo "=== Start ===\n";
$r = new Resource("Connection");
echo "Using " . $r->name . "\n";
unset($r);  // destrói explicitamente o objeto
echo "=== End ===\n";

Saída:

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

A função unset() remove a referência ao objeto, acionando o destrutor imediatamente.

Se você não chamar unset(), o destrutor é executado automaticamente quando o script termina:

$r = new Resource("Logger");
echo "Working...\n";
// __destruct é chamado automaticamente ao final do script

Saída:

Logger was created
Working...
Logger was destroyed

Ponto Chave: O método __destruct é útil para tarefas de limpeza, como fechar arquivos, liberar recursos ou registrar logs quando um objeto não é mais necessário.

challenge icon

Desafio

Médio

Complete a classe Resource em resource.php:

  1. Adicione um método __construct que recebe $name, define-o como uma propriedade e imprime "[name] was created"
  2. Adicione um método logMessage que recebe $message e imprime "Log: [message]"
  3. Adicione um método __destruct que imprime "[name] was destroyed"

O arquivo driver.php testará o ciclo de vida dos seus objetos Resource.

Folha de consulta

O método __destruct é chamado automaticamente quando um objeto é destruído (quando não há mais referências a ele ou quando o script termina).

Exemplo de uma classe com construtor e destrutor:

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

A função unset() remove a referência a um objeto, acionando o destrutor imediatamente:

$r = new Resource("Connection");
unset($r);  // explicitly destroy the object

Se o unset() não for chamado, o destrutor será executado automaticamente quando o script terminar.

O método __destruct é útil para tarefas de limpeza, como fechar arquivos, liberar recursos ou registrar logs.

Experimente você mesmo

<?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 iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos