| 21 - Método destructor de una clase (__destruct) | 
Otro método que se ejecuta automáticamente es el __destruct (destructor de la clase)
Las características de este método son:
Para ver su sintaxis e implementación confeccionaremos el siguiente problema: Implementar una clase Banner que muestre un texto generando un gráfico en forma dinámica. Liberar los recursos en el destructor. En el constructor recibir el texto publicitario.
<?php
class Banner {
  private $ancho;
  private $alto;
  private $mensaje;
  private $imagen;
  private $colorTexto;
  private $colorFondo;
  public function __construct($an,$al,$men)
  {
    $this->ancho=$an;
    $this->alto=$al;
    $this->mensaje=$men;
    $this->imagen=imageCreate($this->ancho,$this->alto);
    $this->colorTexto=imageColorAllocate($this->imagen,255,255,0);
    $this->colorFondo=imageColorAllocate($this->imagen,255,0,0);
    imageFill($this->imagen,0,0,$this->colorFondo);
  }
  public function graficar()
  {
    imageString ($this->imagen,5,50,10, $this->mensaje,$this->colorFuente);
    header ("Content-type: image/png");
    imagePNG ($this->imagen);
  }
  public function __destruct()
  {
    imageDestroy($this->imagen);
  }
}
$baner1=new Banner(428,45,'Sistema de Ventas por Mayor y Menor');
$baner1->graficar();
?> 
Se trata de un archivo PHP puro ya que se genera una imagen PNG y no un archivo HTML.
Al constructor llega el texto a imprimir y el ancho y alto de la imagen. En el constructor creamos el manejador para la imagen y creamos dos colores para la fuente y el fondo del banner.
  public function __construct($an,$al,$men)
  {
    $this->ancho=$an;
    $this->alto=$al;
    $this->mensaje=$men;
    $this->imagen=imageCreate($this->ancho,$this->alto);
    $this->colorTexto=imageColorAllocate($this->imagen,255,255,0);
    $this->colorFondo=imageColorAllocate($this->imagen,255,0,0);
    imageFill($this->imagen,0,0,$this->colorFondo);
  }
El método graficar genera la imagen dinámica propiamente dicha:
  public function graficar()
  {
    imageString ($this->imagen,5,50,10, $this->mensaje,$this->colorFuente);
    header ("Content-type: image/png");
    imagePNG ($this->imagen);
  }
Y por último tenemos el destructor que libera el manejador de la imagen:
  public function __destruct()
  {
    imageDestroy($this->imagen);
  }
Cuando creamos un objeto de la clase Banner en ningún momento llamamos al destructor (se llama automáticamente previo a la liberación del objeto:
$baner1=new Banner(428,45,'Sistema de Ventas por Mayor y Menor'); $baner1->graficar();