Siguiendo con los métodos mágicos que nos facilita php, voy a hablar de __isset, __unset y toString. El método __isset se dispara cuando tratamos de comprobar que un atributo existe mediante la función isset() o si tiene algún contenido mediante empty(). Solo tenemos que pasarle un parámetro que es el nombre del atributo llamado:

<?php 
class MiClase { 
    public $miAtributo = 'Atributo publico. '; 
    public function __isset( $atributo ){ 
        echo ' Método mágico __isset disparado sobre: ' . $atributo; 
        return false; 
    } 
} 

$clase = new MiClase(); 
echo isset($clase->miAtributo); //Imprime: 1 
echo isset($clase->uno); //Imprime: Método mágico __isset disparado sobre: uno 

empty($clase->dos); //Imprime: Método mágico __isset disparado sobre: dos ?>

De esta forma podemos alterar el comportamiento, o simplemente devolver true o false a la petición.

El método __unset utiliza la misma mecánica, salvo que en este caso solo se dispara cuando se trata de destruir un atributo que no existe o es privado mediante la función unset():

<?php 
class MiClase { 
    public $miAtributo = 'Atributo publico. ';
    public function __unset( $atributo ){ 
        echo ' Método mágico __unset disparado sobre: ' . $atributo; 
    } 
} 
$clase = new MiClase(); 
echo $clase->miAtributo; //Imprime: Atributo Publico.
unset($clase->miAtributo); 
echo $clase->miAtributo; //No imprime nada porque ya no existe. 
unset($clase->miAtributo); //Imprime: Método mágico __unset disparado sobre: miAtributo 
?>

Como podemos ver en el ejemplo he realizado unset() dos veces sobre el mismo atributo, la primera vez no se dispara el método mágico _unset porque el atributo si existe, pero en la segunda ocasión el atributo ya no existe por lo tanto el objeto ejecuta _unset. Puede parecer algo lioso pero pongamos que estamos creando un framework de trabajo, en el que tenemos una “super” clase que engloba a otras, y que permite acceder a las clases por debajo de esta solo a través de ella, en ese caso sería bueno poder comprobar con _isset, _set, etcétera, si podemos darle acceso a lo que nos piden.

El método __toString es realmente sencillo pero a su vez es de los más usados cuando se trabaja con objetos. Su función es devolver un string cuando se le trata al objeto como tal. Imagina que tenemos una clase llama Persona, de la cual hay creados 3 objetos, cada uno de estos objetos tiene un atributo llamado “nombre” que nos permite identificar a quien representa cada objeto, ¿que podemos hacer para saber el nombre del objeto? Podríamos declarar el atributo “nombre” como publico, pero esto implicaría que se pueda modificar desde fuera del objeto, y no queremos eso, entonces lo declaramos como privado y creamos un método que devuelva el nombre, algo así “echo $obj->devuelveNombre();”, tiene lógica pero no es necesario, ¿no sería mas fácil simplemente hacer “echo $obj;” y que nos devuelva el nombre?, para eso es toString. En este caso toString cumple la misma función que nuestro método devuelveNombre, con la ventaja de que ya viene definido en php y no tenemos que inventar nada nuevo, mejor verlo en el ejemplo:

<?php 
class Persona { 
    private $_nombre; 
    public function __construct( $nombre ){ 
        $this->_nombre = $nombre; 
    } 
    public function __toString(){ 
        return $this->_nombre; 
    } 
} 
$persona = new Persona( 'Juan' ); 
echo $persona; //Imprime: Juan 
?>

Como el nombre del método indica, imprime un string no le sirve otro valor, tenlo en cuenta para evitarte dolores de cabeza.