El poder de los Métodos Mágicos radica en que permite definir escenarios o eventos que puedan ocurrir en un futuro y de esa manera tener un código preparado para disparar esa acción acorde a lo ocurrido. En pocas palabras, son métodos específicos para responder a ocasiones especificas mientras se usa un objeto.
Se caracterizan por tener dos underscore ( __ ) como prefijo de su nombre.
Entre los métodos mágicos que mas se conocen estan:
**El Constructor **
function __construct($properties)
Algo interesante que se puede hacer en el constructor es llamado “la sugerencia de tipos” que permite señalar claramente el tipo de dato que debe ser enviado como parámetro del constructor. Por ejemplo:
function __construct(array $address)
{
...
}
$address = [
‘Militares,
‘5800’,
‘Chile’
];`
$myObjetct = new Object ($address);
``
En el ejemplo se tiene un constructor que tomara como parámetro una variable de tipo arreglo y si no se envía de ese resultara en un error. Esto es muy útil para agregar un nuevo nivel de protección, lo que lleva a mejorar la seguridad y mejorar la forma de hacer el código.
**El destructor**
function __destruct(){
…
}
Es el ultimo que se ejecuta, cuando elmétodo no tiene mas referencias o cuando se obliga el cierre del mismo.
Es muy útil porque permite limpiar el objeto eliminándolo la memoria resultando enuna mejora enel rendimiento en tiempo de ejecución.
**Las llamadas**
function __call($method, $arguments){
}
function __callStatic($method, $arguments){
}
Estas se invocan cuando se llama a un método queno existe dentro del objeto o que es inaccesible desde el contexto de donde se esta llamando.
Funcionan dela misma manera solo que uno responde a llamadas de tipo estático y el otro no.
**Los getter y setter**
function __get($property){
}
function __set($property){
}
Estos métodos son llamados cuando se quiere acceder o establecer valor a una variable que son de tipo **_protected_** o **_private_** o que simplemente no existen enla clase.
**El metodo toString**
Permite definir el comportamiento de una clase que es tratada como una cadena de texto. Este método se considera delicado debido a que si nose trata dela manera adecuada puede generar errores fatales en tiempo de ejecución.
Una forma correcta de usarlo es
class Calling
{
public $sentence;
public function __toString()
{
return $this->sentence;
}
}
$myCall = new Calling();
echo $myCall;