ObjetivoPHP

Constructores, Destructores y auto-carga de Clases (POO 03)

por ObjetivoPHP el Ago.15, 2009, bajo Orientacion a Objetos

Constructor

Es un método especial de una clase , que es llamado siempre que se inicializa un objeto. Es decir cuando instanciamos una clase se ejecuta ese método automáticamente, se utiliza para cualquier inicialización que el objeto pueda necesitar antes de ser usado.
La sintaxis básica es: void __construct ( [mixed args [, ...]] ), dado que esta forma solo esta soportada a partir de PHP5, también se puede declarar un constructor usando el mismo nombre que la clase a la cual pertenece (Para otorgar compatibilidad con PHP4), es decir si al instanciar no encuentra el método __construct(), PHP buscara un método que se llame igual que la clase.

Si una clase que hereda (sub-clase o clase hija), tiene definido su propio constructor, entonces al crear el objeto de esta, solo se ejecutara el constructor propio de la clase hija y no el de la clase superior o padre. Si necesitamos que la clase padre ejecute su constructor entonces debemos realizar una llamada explicita al método padre de la siguiente manera parent::__construct().

10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
class BaseClase
{
    function __construct()
    {
        print "Constructor de Clase Base<br />\n";
    }
}
 
class SubClase extends BaseClase
{
    function __construct()
    {
        parent::__construct();   // llamamos al constructor de la clase padre.
        print "Constructor en clase Hija<br />\n";
    }
}
 
$obj = new BaseClase();
// salida : Constructor de Clase Base
$obj = new SubClase();
// salida: Constructor de Clase Base
//          Constructor en clase Hija
?>

Destructor

PHP 5 introduce un concepto de destructor similar a aquellos de 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. En definitiva es otro método especial de una clase que se ejecuta antes de que un objeto de esa clase sea eliminado físicamente de la memoria. El destructor se utiliza para realizar las acciones finales, como borrar viejos archivos o liberar recursos.

Como sucede en 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.
El destructor es llamado durante la finalización del script, de tal manera que los headers ya han sido enviados.
Si se intenta arrojar una excepción desde un destructor produce un error fatal.

25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
class MyDestructableClass
{
    function __construct()
    {
        print "In constructor\n";
        $this->name = "MyDestructableClass";
   }
 
    function __destruct()
    {
        print "Destroying " . $this->name . "\n";
    }
}
 
$obj = new MyDestructableClass();
?>

Auto-Carga de Clases

Muchos desarrolladores que escriben aplicaciones con programación orientada a objetos crean un archivo fuente PHP por cada definición de clase. Una de las molestias más grandes es tener que escribir una larga lista de includes necesarios al principio de cada script (uno para cada clase).

En PHP 5, esto ya no es necesario. Puede definir una función __autoload la cual es llamada automáticamente en caso de que intente usar una clase que no ha sido definida aún. Al llamar esta función la ejecución del script da una última oportunidad de cargar la clase antes de que PHP falle con un error.

Las excepciones arrojadas en la función __autoload no pueden ser capturadas en el bloque catch y resultan en el despliegue de un error fatal.

52
53
54
55
56
57
58
59
60
<?php
function __autoload($nombreDeClase)
{
	require_once $nombreDeClase . '.php';
}
 
$obj  = new MyClass1();
$obj2 = new MyClass2();
?>

La pequeña rutina intenta levantar la clase MyClass1, al fallar y tener el método mágico __autoload, pasa el nombre de la clase a dicha función quien realiza el include para poder lograr la instancia.

:, , , ,

Dejar un Comentario

Busca algo

Use el formulario debajo para buscar en el sitio:

Todavía no a encontrado lo que usted busca? Deje un comentario, o póngase en contacto con nosotros así podremos ayudarlo.

Visite a nuestros amigos!

Recomendamos las siguientes paginas amigas...

Archivo

Todas las entradas, cronológicamente...