Comparte en Facebook Twitter Google+

metodos-magicos-php

¿Alguna vez te has preguntado cómo funcionan ORMs como Eloquent? Eloquent y otros ORMs en PHP hacen uso de algo llamado Métodos mágicos

Los métodos mágicos mágicos los provee PHP y nos permiten realizar ciertas tareas orientadas a objetos.

Los métodos mágicos identifican por el uso de dos guiones bajos “__” como prefijo, y funcionan como interceptores que se llaman automáticamente cuando ocurre una condición.

__get()

Este método se llama cuando intentamos acceder a una propiedad no accesible, acepta como parámetro un valor que es el nombre de la propiedad y deberíamos devolver el valor “virtual” de dicha propiedad. Vamos a realizar un ejemplo:

Para comenzar crearemos una clase, llamada Inflector, con un método llamado “studly” el cual recibirá una cadena de palabras divididas por guion bajo “_”, y regresará la misma cadena pero en formato CamelCase, por ejemplo: numero_dias regresará NumeroDias.

 

Ahora crearemos una clase base para todas las entidades del proyecto en la cual utilizaremos el método mágico __construct en donde, al crear una clase, recibiremos por parámetros todas las propiedades de la misma en formato array y se las asignaremos a la variable $properties, así podemos crear diferentes entidades con “N” propiedades. Este parámetro será opcional.

Creamos la clase User que extiende de la clase Entity, para poder hacer uso de toda la lógica ya mostrada.

 

 

Aquí utilizamos el método __construct() y __get() de una forma muy profesional y orientada a objetos, similar a como lo manejan ORMs como Eloquent.

__set()

Continuamos con los métodos y nos toca hablar de __set(). __set funciona de forma contraria a __get(), ya que nos sirve para asignar un valor a una propiedad no visible. Continuaremos con el ejemplo anterior  y solo agregaremos las funciones necesarias.

Este método se ejecuta cuando se le asigna un valor a una propiedad por ejemplo $user->name =”Jesus David”; es en este momento en donde, al no existir la propiedad name dentro del objeto, PHP llamará al método __set y dicho llamado nos servirá para realizar acciones como asignar el valor a la entidad.

Continuemos con el ejemplo, creamos una función que se llama setProperty para seguir utilizando nuestra clase “entidad” con N propiedades:

En esta función revisamos si existe un método set con el nombre de la propiedad, si es así se ejecuta, de lo contrario asignamos el valor al array properties directamente.

Ejemplo de un método dinámico que podríamos invocar a través de __set:

Se pueden hacer operaciones como limpiar una variable antes de asignarla a la propiedad.

 __isset()

Este nos sirve para saber si una propiedad existe dentro de una clase, y se ejecuta al hacer lo siguiente:

Comprobamos si existe la propiedad name. y si existe devolvemos TRUE, sino FALSE.

 __unset()

__unset nos sirve para eliminar una propiedad de la clase y se llama cuando ejecutamos:

Esto eliminará del array de $propeties la variable  que se le envía en este caso el nombre:

Y lo podemos comprobar de la siguiente manera.

Con esto terminamos la primera parte de los métodos mágicos.

En la siguiente entrega veremos mas métodos interesantes que nos ayudan y facilitan muchas tareas a la hora de programar.

Aprende PHP, Laravel y más por sólo 999 al mes: ver planes.

Lección anterior Aprende programación orientada a objetos: Patrón Factory Lección siguiente Abstracción con PHP y programación orientada a objetos