Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

__get y __set

Estas en el tema de __get y __set en el foro de Frameworks y PHP orientado a objetos en Foros del Web. bueno quisiera saber si alguien me peude explicar muy detalladamente como y para que sirven estos dos metodos: especialmente en estas lineas, es decir q ...
  #1 (permalink)  
Antiguo 14/06/2010, 18:57
 
Fecha de Ingreso: abril-2010
Mensajes: 30
Antigüedad: 14 años
Puntos: 0
__get y __set

bueno quisiera saber si alguien me peude explicar muy detalladamente como y para que sirven estos dos metodos: especialmente en estas lineas, es decir q retorna el metodo get o que sentido tiene alli

Código PHP:
25    if(method_exists($this,'get'.$propertyName)){
26        return call_user_func(array($this,'get'.$propertyName)); 
Código PHP:
function  __get($propertyName) {
22    if(!array_key_exists($propertyName$this->propertyTable)){
23        throw new Exception("Invalid Property ".$propertyName."..!");
24    }
25    if(method_exists($this,'get'.$propertyName)){
26        return call_user_func(array($this,'get'.$propertyName));
27    }
28    else{
29        return $this->data[$this->propertyTable[$propertyName]];
30    }
31 
Código PHP:
33 function  __set($propertyName,  $value) {
34     if(!array_key_exists($propertyName$this->propertyTable)){
35       throw new Exception("Invalid Property".$propertyName."..!");
36     }
37     if(method_exists($this,'set'.$propertyName)){
38         return call_user_func(array($this,'set'.$propertyName),$value);
39     }
40     else{
41        //Si el valor de la propiedad ha cambiado realmente
42        //y no esta en la matriz changedProperties
43        //añadirlo
44        if($this->propertyTable[$propertyName]!= $value &&
45                !in_array($propertyName,$this->changedProperties)) {
46            $this->changedProperties[] = $propertyName;
47        }
48        //Establece ahora el nuevo valor
49        $this->data[$this->propertyTable[$propertyName]] = $value;
50     }
51 
  #2 (permalink)  
Antiguo 14/06/2010, 19:01
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: __get y __set

son métodos mágicos... pero, perdón que me adelante... ¿ya has leído el manual al respecto??
http://php.net/manual/en/language.oop5.magic.php

digo, si ya leíste y no has entendido algo para eso estamos...

pero en caso omiso de ello, pues ya sabes...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 15/06/2010, 09:16
 
Fecha de Ingreso: mayo-2007
Mensajes: 5
Antigüedad: 17 años
Puntos: 1
es decir que si un metodo invoca a una propiedad de la clase este primero hace una verificacion si existe el metodo y si existe le devuelve una llamada con call_user_func pasandole un arreglo devolviendole el valor de parametro

a que metodo es el que llama cuando usa call_user_func

Última edición por GatorV; 15/06/2010 a las 13:54
  #4 (permalink)  
Antiguo 15/06/2010, 10:05
 
Fecha de Ingreso: abril-2010
Mensajes: 30
Antigüedad: 14 años
Puntos: 0
Cita:
Iniciado por pateketrueke Ver Mensaje
son métodos mágicos... pero, perdón que me adelante... ¿ya has leído el manual al respecto??
[url]http://php.net/manual/en/language.oop5.magic.php[/url]

digo, si ya leíste y no has entendido algo para eso estamos...

pero en caso omiso de ello, pues ya sabes...
si me he leido los metodos __set y __get que son para interactuar con los valores de las propiedades de clase, pero quisiara saber pq se concatena this.'get'.propertyname , lo digo pq a mi entender es que devuelve el valor de una propiedas en una clase actual y si ese valor existe lo devuelve como un arreglo a una funcion que ya esta definida en la clase, no si lo entiendo bien o estoy equivocado

Última edición por GatorV; 15/06/2010 a las 13:53
  #5 (permalink)  
Antiguo 15/06/2010, 10:58
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: __get y __set

es simple, la expresión dice lo siguiente:
Código PHP:
// si el metodo existe...
if(method_exists($this,'get'.$propertyName))
// entonces devolvemos la ejecucion del metodo...
return call_user_func(array($this,'get'.$propertyName)); 
de verdad es sencillo de entender, el método mágico __get() te permite dinamizar el acceso a propiedades inaccesibles naturalmente...

pero, si existe un método que se asemeje, o bien, sirva para ello lo ejecuta en lugar de devolver alguna propiedad interna... (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #6 (permalink)  
Antiguo 15/06/2010, 14:58
atrianaster
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: __get y __set

Esto viene dado por stateless del ambiente web y la persistencia de objetos en php.

La mayoría de las aplicaciones web contemporáneas persisten información en Bases de Datos Relacionales y utilizan Programación Orientada a Objetos (POO). El desarrollador debe realizar mecánicamente la transición de la información entre el Lenguaje de POO usado a la BDR para lograr persistir la información.

En el ejemplo que muestras puede ser una parte de algún framework que utiliza el patrón Active Record y lo que hace es crear métodos set y get para cada campo de las tablas de la base de datos.
  #7 (permalink)  
Antiguo 15/06/2010, 16:32
 
Fecha de Ingreso: abril-2010
Mensajes: 30
Antigüedad: 14 años
Puntos: 0
Respuesta: __get y __set

Me prodrias pasar algun link para aclararme este tema
  #8 (permalink)  
Antiguo 15/06/2010, 22:44
atrianaster
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: __get y __set

Aquí lo puedes ver. Este es un artículo de Christopher más conocido por GatorV moderador de este sub-foro además.

http://web2development.blogspot.com/2007/05/patron-activetable-y-activerecord.html
  #9 (permalink)  
Antiguo 16/06/2010, 16:02
 
Fecha de Ingreso: abril-2010
Mensajes: 30
Antigüedad: 14 años
Puntos: 0
Respuesta: __get y __set

gracias estuvo muy bien el blog

Etiquetas: set
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:21.