Título: Métodos mágicos __set y __get, Definición y uso con __call en PHP Publicado por: Graphixx en 13 Abril 2012, 20:24 pm Los métodos mágicos en php son muy utiles y altamente usados en frameworks y orms com zend o Doctrine, en este artículo espero explicar un poco de ellos y los posibles problemas que pueden tener.
Los métodos mágicos en php nos permiten llamar métodos en objetos como si exitieran aunque en realidad no existen , de esta manera podemos tener métodos, en este caso set y get, para setear o sustraer datos de atributos sin necesidad de declararlos. Existen otros métodos como __clone, __wakeup o __construct entre los mas utilizados que nos permiten realizar tareas diversas , pero aca nos centraremos en los métodos mágicos “set” y “get”. Los métodos mágicos de php __set y __get funcionan como habilitando atributos públicos, es decir el llamado al método se hace de la misma manera en el que se modificaria un atributo desde afuera , por ejem si deseo hacer un set a la propiedad nombre tendria que hacer $objeto->nombre =”Lucas”; Para obtener el valor o hacer un get simplemente hago $valor = $objeto->nombre; Hacer el set y el get como un atributo publico no significa que se se rompa con el encapsulamiento ya que siempre se pasa por los métodos mágicos __get y __set. Personalmente no me agrada el tener que llamar un método set haciendo por ejem $objeto->metodo=’algo’ ya que da la sensación de que no es un método y confunde en el código. Es por eso que haciendo algunos cambios podemos obtener el mismo efecto. Para ello utilizaremos el método mágico __call el cual nos permite llamar mágicamente cualquier método , cuando el método que llamamos no existe se ejecuta automaticamente este método mágico call con el nombre del metodo que no existe como parametro, ahora sabiendo esto podemos hacer $objeto->setMetodo(‘algo’); lo que llamaria a __call con setMetodo como parametro mas los argumentos en este caso ‘algo’ si tomamos las 3 primeras letras del método que viene por parametros podemos saber si es un set o un get y proceder acorde a eso. De esta manera nos ahorramos de tener que crear set y get para todos los atributos , pudiendo crearlos en las clases cuando necesitemos añadir una validación y no definiendolos cuando queremos tome el comportamiento estandard. El código PHP final queda Código
Para usarlos $xx = new test(); $xx->setPrueba(“aca va algo”); $xx->setPrueba2(“aca va algo2″); echo $xx->getPrueba(); echo $xx->getPrueba2(); Fuente: http://vacilmio.blogspot.com/2010/07/php-orientado-objetos-metodos-magicos.html Título: Re: Métodos mágicos __set y __get, Definición y uso con __call en PHP Publicado por: raul338 en 13 Abril 2012, 20:35 pm Buena info! :D
|