En php tenemos los llamados métodos mágicos, son métodos incluidos por defecto en todas las clases que se llaman internamente al dispararse un evento concreto. Estos métodos se reconocen rápidamente porque usan dos barras inferiores “” antes del nombre, por ejemplo *construct()*.

Hay una buena variedad de métodos mágicos, pero vamos poco a poco. De momento explicaré para que se usa el método __construct() y* __destruct().*

Imaginemos que tenemos una clase para crear un balón, pero tenemos diferentes tipos de balones, baloncesto, rugby, fútbol, tenis, ¿Como le indicamos al objeto que tipo de balón es?, una forma puede ser crear el objeto y luego pasarle mediante un método el tipo de balón:

_tipo = $tipo; } public function sayTipo(){ echo $this->_tipo; } } $balon = new MiBalon(); $balon->setTipo( 'tenis' ); $balon->sayTipo(); //Imprime "tenis"; ?>

Pero esta forma no es todo lo eficiente que debiera, es aquí donde entra en juego el constructor de las clases. Este método mágico nos permite realizar acciones en el objeto justo cuando lo instanciamos o también pasarle parámetros:

_tipo = $tipo; echo $this->_tipo; } } //Le pasamos el tipo de balón al instanciar el objeto $balon = new MiBalon( 'tenis' ); ?>

Realmente muy sencillo de implementar y espectacularmente útil, personalmente donde mas potencial le veo a este método es en las clases que permiten herencia, pero eso lo veremos pronto, de momento es fácil imaginar usos, por ejemplo una clase que controle las conexiones a una base de datos, en el momento de crear el objeto establecemos la conexión con esta, o simplemente queremos saber el numero de objetos creados y usamos el constructor más los atributos estáticos:

_tipo = $tipo; echo " Numero " . self::$numero; } } //Le pasamos el tipo de balón al instanciar el objeto $balon = new MiBalon( 'tenis' ); //Imprime "Numero 1" $balon2 = new MiBalon( 'futbol' ); //Imprime "Numero 2" ?>

El antagonista del constructor es (como ya te imaginarás) el destructor. El destructor es otro método mágico que se dispara cuando se elimina un objeto, más concretamente antes de que se elimine el objeto. Su uso es muy similar al constructor pero sin el uso de parámetros, y sus funciones pueden ser muchas dependiendo del uso que se le de a la clase, por ejemplo si hablamos de una clase para controlar una base de datos nos puede interesar que al eliminar el objeto se cierre la conexión con esta, o simplemente mostrar un error:

_tipo = $tipo; } public function __destruct(){ echo "¡Oh NO, han matado a Kenny!"; } } //Le pasamos el tipo de balón al instanciar el objeto $balon = new MiBalon( 'tenis' ); //Imprime "Numero 1" unset($balon); //Imprime "¡Oh NO, han matado a Kenny!" ?>