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 scriptSalida:
Logger was created
Working...
Logger was destroyedPunto 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.
Desafío
IntermedioCompleta la clase Resource en resource.php:
- Agrega un método
__constructque reciba$name, lo asigne como una propiedad e imprima"[name] was created" - Agrega un método
logMessageque reciba$messagee imprima"Log: [message]" - Agrega un método
__destructque imprima"[name] was destroyed"
El archivo driver.php probará el ciclo de vida de tus objetos Resource.
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");
}
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
1Fundamentos de la POO
Archivos externosIntroducción a la POOClases frente a objetosLa palabra clave $thisMétodosPropiedadesConstructor (__construct)Destructor (__destruct)Repaso: calculadora simple4Herencia
Herencia básicaLa palabra clave parent::Sobrescritura de métodosLa palabra clave finalClases abstractasRepaso - Jerarquía de empleados7Encapsulación
Público, protegido, privadoModificadores de acceso en profundidadGetters y settersOcultación de la informaciónPromoción del constructor (8.0)Repaso: sistema de registros de estudiantes10Conceptos avanzados de OOP
Composición vs. herenciaInyección de dependenciasClases anónimasEnums (PHP 8.1)Fibras (PHP 8.1)Análisis profundo de la clonación de objetosGeneradores e iteradores13Patrones de diseño Parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón CompositePatrón Repository2Namespaces y carga automática
Introducción a los NamespacesLa palabra clave useEstándar de carga automática PSR-4Autoloader de ComposerRepaso: proyecto organizado5Interfaces y contratos
Introducción a las interfacesImplementación de interfacesImplementación de múltiples interfacesInterfaces vs. clase abstractaTipado con interfacesRepaso - Calculadora de formas8Métodos mágicos
Introducción a los métodos mágicos__toString y __debugInfo__get, __set, __isset, __unset__call y __callStatic__clone y clonación de objetos__serialize y __unserializeRepaso: colección personalizada3Propiedades de clase
Propiedades de instancia vs. estáticasConstantes en clasesMétodos y propiedades estáticosPropiedades privadas y protegidasPropiedades de solo lectura (PHP 8.1)Repaso: gestor de cuentas bancarias6Polimorfismo
Repaso de la sobrescritura de métodosPolimorfismo mediante interfacesAnotaciones de tipo y tipos uniónEnlace estático tardíoRepaso: procesador de pagos9Traits
Introducción a los TraitsUso de múltiples TraitsResolución de conflictos entre TraitsMétodos abstractos en TraitsTraits frente a la herencia12Patrones de diseño, parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón StrategyPractica por tu cuenta: Compilador de PHP online