Forum und email

Constructores y Destructores

Constructor

void __construct ([ mixed $args [, $... ]] )

PHP 5 permite a los desarrolladores declarar métodos constructores para las clases. Las clases que tienen un método constructor llaman a este método cada vez que se crea un nuevo objeto, para cualquier inicialización que el objeto puede necesitar antes de ser usado.

Note: Los constructores padres no son llamados implicitamente si la clase hijo define un constructor. Para poder ejecutar el constructor de la clase padre, se debe hacer una llamada a parent::__construct() dentro del constructor de la clase hijo.

Example#1 Usando constructores unificados

<?php
class BaseClass {
   function 
__construct() {
       print 
"In BaseClass constructor\n";
   }
}

class 
SubClass extends BaseClass {
   function 
__construct() {
       
parent::__construct();
       print 
"In SubClass constructor\n";
   }
}

$obj = new BaseClass();
$obj = new SubClass();
?>

Para tener compatibilidad con versiones anteriores, si PHP 5 no encuentra una función __construct() para una clase dada, buscará la forma de la función del constructor que se usaba anteriormente por el nombre de la clase. Efectivamente, esto significa que el único caso que puede tener problemas de compatibilidad es si la clase tiene un método llamado __construct() el cual tiene un uso diferente.

Destructores

void __destruct ( void )

PHP 5 introduce un concepto de destructor similar a los otros lenguajes de programación orientada a objetos, tal como C++. El método destructor será llamado tan pronto como todas las referencias a un objeto en particular sean removidas o cuando el objeto sea explícitamente destruido, o en cualquier orden en la finalizacion de la ejecución.

Example#2 Ejemplo de Destructor

<?php
class MyDestructableClass {
   function 
__construct() {
       print 
"In constructor\n";
       
$this->name "MyDestructableClass";
   }

   function 
__destruct() {
       print 
"Destroying " $this->name "\n";
   }
}

$obj = new MyDestructableClass();
?>

Como los constructores, los destructores de la clase padre no serán llamados explícitamente por el compilador. Para ejecutar un destructor padre, se debe tener una llamada explícita a parent::__destruct() en el cuerpo del destructor.

Note: Los destructores llamados durante la finalización del script ya han enviado los encabezados HTTP. El directorio actual en la fase de finalizacion del script puede ser diferente con algunas SAPIs (ej. Apache).

Note: Intentar arrojar una excepción desde un destructor (llamado durante la finalización del script) produce un error fatal.