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