> Manuales > Orientación a objetos con PHP

Explicación de los destructores en PHP5 y ejemplos de funcionamiento.

Los destructores son funciones que se encargan de realizar las tareas que se necesita ejecutar cuando un objeto deja de existir. Cuando un objeto ya no está referenciado por ninguna variable, deja de tener sentido que esté almacenado en la memoria, por tanto, el objeto se debe destruir para liberar su espacio. En el momento de su destrucción se llama a la función destructor, que puede realizar las tareas que el programador estime oportuno realizar.

La creación del destructor es opcional. Sólo debemos crearlo si deseamos hacer alguna cosa cuando un objeto se elimine de la memoria.

El destructor es como cualquier otro método de la clase, aunque debe declararse con un nombre fijo: __destruct().

En el código siguiente vamos a ver un destructor en funcionamiento. Aunque la acción que realiza al destruirse el objeto no es muy útil, nos puede servir bien para ver cómo trabaja.

class cliente{ 
   	var $nombre; 
   	var $numero; 
   	var $peliculas_alquiladas; 

   	function __construct($nombre,$numero){ 
      	$this->nombre=$nombre; 
      	$this->numero=$numero; 
      	$this->peliculas_alquiladas=array(); 
   	} 

   	function __destruct(){ 
      	echo "<br>destruido: " . $this->nombre; 
   	} 

   	function dame_numero(){ 
      	return $this->numero; 
   	} 
} 

//instanciamos un par de objetos cliente 
$cliente1 = new cliente("Pepe", 1); 
$cliente2 = new cliente("Roberto", 564); 

//mostramos el numero de cada cliente creado 
echo "El identificador del cliente 1 es: " . $cliente1->dame_numero(); 
echo "<br>El identificador del cliente 2 es: " . $cliente2->dame_numero();

Este código es igual que el anterior. Sólo se ha añadido el destructor, que imprime un mensaje en pantalla con el nombre del cliente que se ha destruido. Tras su ejecución obtendríamos la siguiente salida.

El identificador del cliente 1 es: 1
El identificador del cliente 2 es: 564
destruido: Pepe
destruido: Roberto

Como vemos, antes de acabar el script, se libera el espacio en memoria de los objetos, con lo que se ejecuta el destructor y aparece el correspondiente mensaje en la página.

Un objeto puede quedar sin referencias y por lo tanto ser destruido, por muchas razones. Por ejemplo, el objeto puede ser una variable local de una función y al finalizarse la ejecución de esa función la variable local dejaría de tener validez, con lo que debe destruirse.

El código siguiente ilustra cómo una variable local a cualquier ámbito (por ejemplo, local a una función), se destruye cuando ese ámbito ha finalizado.

function crea_cliente_local(){ 
   	$cliente_local = new cliente("soy local", 5); 
} 
crea_cliente_local()

La función simplemente crea una variable local que contiene la instanciación de un cliente. Cuando la función se acaba, la variable local deja de existir y por lo tanto se llama al destructor definido para ese objeto.

Nota: También podemos deshacernos de un objeto sin necesidad que acabe el ámbito donde fue creado. Para ello tenemos la función unset() que recibe una variable y la elimina de la memoria. Cuando se pierde una variable que contiene un objeto y ese objeto deja de tener referencias, se elimina al objeto y se llama al destructor.

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online Escu...

Manual