Blog de Gonzalo

MAGIC FUNCTIONS

Los métodos mágicos, o magic functions permiten realizar acciones en objetos cuando suceden determinados eventos que los activan. Estos métodos, denominados con doble guión bajo como prefijo, determinan cómo reaccionará el objeto ante dichos eventos. Los métodos mágicos más importantes son:

  • __construct: Llamado automáticamente cuando se crea el objeto. Permite inyectar parámetros y dependencias para construir el objeto.
  • __destruct: Permite ejecutar varias acción antes de la extinción del objeto, como cerrar la sesión de base de datos.
  • __get: Permite acceder a una propiedad que es private o protected.
    
    public function __get($property){
        if(property_exists($this, $property)) {
            return $this->$property;
        }
    }
  • __set: Permite establecer el valor a una propiedad que es private o protected.
    
    public function __set($property, $value){
        if(property_exists($this, $property)) {
            $this->$property = $value;
        }
    }
    
  • __call: Este método es llamado cuando se trata de llamar a un método que no existe o a un método private o protected desde el contexto del objeto. Permite realizar una acción al llamar a un método no accesible o inexistente del objeto.
  • __callStatic: Este método es llamado cuando se trata de llamar a un método estático no accesible (que no existe o que está declarado como private o protected). Permite realizar una acción al llamar a un método estático no accesible del objeto.
  • __clone: Este método es llamado después de la clonación de un objeto con la palabra reservada clone. Permite realizar acciones sobre el nuevo objeto clonado.
  • __isset: La función isset() de PHP determina la existencia o no de una variable, pero si quisiera usar la función isset para saber si existe un atributo no definido o inexistente de un objeto debemos definir primero el método mágico __isset. Este método es llamado automáticamente cuando se invoca la función isset() sobre un atributo inaccesible o no definido de un objeto. Permite programar acciones con posterioridad a la invocación de la función isset().
  • __unset: La función unset() de PHP permite destruir una variable, pero si quisiéramos utilizar la función unset() para intentar destruir un atributo que no está definido o inexistente en un objeto se deberia definir el método mágico __unset. Este método es llamado automáticamente cuando se invoca la función unset() sobre un atributo inaccesible o no definido de un objeto. Permite programar acciones con posterioridad a la invocación de la función unset().
  • __toString: Este método es llamado después de invocar de las funciones de impresión echo, print y printf. Finalidad: Permite asociar un string a un objeto, que será mostrado si dicho objeto es invocado como una cadena echo.
  • __sleep: Este método es llamado después de invocar la función serialize. Permite determinar los atributos que queremos mostrar en la representación del objeto (serialización).
  • __wakeUp: Este método es llamado después de invocar la función unserialize. Permite programar una acción que se ejecutara inmediatamente después de la ejecución de la función unserialize.
  • __invoke: Este método es llamado cuando se intenta invocar un objeto como si se tratara de una función. Permite controlar el comportamiento de un objeto cuando este intenta ser llamado como a una función. Es decir, Si no definiéramos __invoke y tratáramos de utilizar el objeto como si se tratara de una función obtendremos un error.
  • __debugInfo:Este método es llamado cuando un objeto es usado dentro de un var_dump. Al parecer xdebug no hace caso de este méotod mágico
    
    class Example
    {
        public $property1;
        public $property2;
    
        public function __construct($prop1, $prop2)
        {
            $this->property1 = $prop1;
            $this->property2 = $prop2;
        }
    
        public function __debugInfo()
        {
            return [
                'property1' => $this->property1,
                'property2' => strtoupper($this->property2),
            ];
        }
    }
    $example = new Example('value1', 'value2');
    var_dump($example);
    
    En este ejemplo, el método __debugInfo está implementado la clase "Example". Cuando se usa var_dump($example) PHP invoca automática __debugInfo para personalizar la información a mostrar.

Compartir en twitter