Principal


Metodos magicos __set y __get, Definicion y uso con __call en PHP

** (2.00)
views: 1212

El problema de los metodos magicos de php __set y __get es que funcionan como habilitando atributos publicos, es decir el llamado al metodo  se hace de la misma manera en el que se modificaria un atributo desde afuera lo cual no significa que se se rompa con el encapsulamiento ya que siempre se pasa por __get y __set por mas que el llamado sea distinto, pero personalmente no me agrada el tener que llamar un metodo set haciendo por ejem
$objeto->metodo='algo';
da la sensacion de que no es un metodo y confunde en el codigo bueno navegando por ahi un amigo me paso este codigo que funciona muy bien , hay que modificarle algunas cosas para adaptarlo pero la idea es buena, usando el metodo magico __call se pueden obtener metodos set y get con cualquier
nombre de manera automatica, de esta forma la llamada quedaria

$objeto->setMetodo('algo');

mucho mas claro y parecido a la programacion en gral


class test{

 private $attrib = array();

 public function __call($method, $args){

  $methodType = substr($method, 0, 3);
  $attribName = substr($method, 3);

  if( $methodType == "set" ){
   $this->setAttrib($attribName, $args[0]);
  }

  if( $methodType == "get" ){
   return $this->getAttrib($attribName);
  }
 }

 private function setAttrib($attribName, $value){
  $this->attrib[$attribName] = " + $value + ";
 }

 private function getAttrib($attribName){
  return $this->attrib[$attribName];
 }
}

// para usarlos
$xx = new test();
$xx->setPrueba("aca va algo");
$xx->setPrueba2("aca va algo2");
echo $xx->getPrueba();
echo $xx->getPrueba2();

 

 
 


Cómo Calificas este artículo?:
1 2 3 4 5


Los que entraron en este post también vieron:


Comentarios:

 Jorge dice:
Los métodos set y get no se usan para habilitar o modificar atributos públicos, las funciones suelen ser bastante simples como class objeto{ private $atributo; public function __get($attr){ return $this->$attr;} } Lo mismo con el metodo set. Pero me gustaría si podrías explicar más el código del método call que siempre me ha costado comprenderlo
2011-06-11
jorguerra@gmail.com
 Lucas dice:
Jorge , leiste mal no dije en ningun momento que habilitas o modificas atributos publicos, incluso aclaro que el encapsulamiento no se rompe, simplemente lo que digo es que el seteo o la obtencion de valores utilizan la misma sintaxis. Cuando tenga un poco de tiempo voy a mejorar lo del metodo call , saludos y gracias por el comentario
2011-06-13

Agregar Comentario:


Nombre:                       Valoración:
Comentario:
E-mail:(opcional)

Copie el texto: