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();