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

Metodo definido function __get (). Como funciona ?

Estas en el tema de Metodo definido function __get (). Como funciona ? en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Estaba leyendo sobre constantes de clases, algo buenisimo por cierto a partir de PHP5; y en el manual oficial de PHP hay un comentario sobre ...
  #1 (permalink)  
Antiguo 07/03/2007, 03:41
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 1 mes
Puntos: 4
Metodo definido function __get (). Como funciona ?

Estaba leyendo sobre constantes de clases, algo buenisimo por cierto a partir de PHP5; y en el manual oficial de PHP hay un comentario sobre como poder acceder al valor de una constante de clase, ya que lasa mismas están encapsuladas por lo que no podemos hacer referencia directamente. Encontré este ejemplo.

Código PHP:
<?php
class MyClass
{
   const 
MY_CONSTANT "Constant class";
   public static function 
__get($name)
   {
     if(
defined("self::$name"))
     {
         return 
constant("self::$name");
        
     }
     
trigger_error ("Constant $name  isn't defined");
   }
}

$instance = new MyClass();
echo 
$instance->MY_CONSTANT//it works!!
?>
SaludosPD: Me estoy llendo a php.net a ver __get ... creo que vuelvo en un rato.
__________________
| Cabeza De Raton |
  #2 (permalink)  
Antiguo 07/03/2007, 09:42
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Metodo definido function __get (). Como funciona ?

jejej tanto para hacer esto:
Código PHP:
echo MyClass::MY_CONSTANT
  #3 (permalink)  
Antiguo 07/03/2007, 09:42
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Re: Metodo definido function __get (). Como funciona ?

Cuando "desde afuera" quieres acceder a una propiedad que no existe o que no es visible( privada, por ejemplo), si tenes definido el metodo "mágico" __get, este recibe un parámetro (en tu ejemplo "$name") que contiene el nombre de la propiedad que intentaste recuperar. Una vez que sabes dicho valor podés lanzar un mensaje de error, averiguar su valor y retornarlo (como en tu ejemplo), llamar a un metodo, etc.


Saludos
__________________
Federico.

Mi página: www.jourmoly.com.ar
  #4 (permalink)  
Antiguo 07/03/2007, 09:49
Avatar de Calisco  
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 732
Antigüedad: 20 años, 1 mes
Puntos: 4
Re: Metodo definido function __get (). Como funciona ?

Gracias Fridureiks. Esto es propio de PHP, no es cierto ?. Poco tiene que ver con POO. pregunto ...
__________________
| Cabeza De Raton |
  #5 (permalink)  
Antiguo 07/03/2007, 10:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Metodo definido function __get (). Como funciona ?

Asi es son metodos magicos, leelos en el manual, son __get, __set, __unset, __isset, __sleep, __wakeup, __call.
  #6 (permalink)  
Antiguo 28/02/2008, 17:36
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 18 años, 7 meses
Puntos: 19
Re: Metodo definido function __get (). Como funciona ?

Me he encontrado con este problema pero con una vuelta de tuerca más.

En mi caso, tengo una clase base donde añado el método mágico __get tal y como se ha descrito más arriba. Lo hago así, porque quiero dar esta funcionalidad a todas las clases 'hijo'. (Poner la misma función en todas las clases hijos me parece muy ineficiente)

El problema viene del self:: que accede a la clase base y no a la clase hijo que es de donde se le llama.

¿Alguna idea o ayuda?
  #7 (permalink)  
Antiguo 28/02/2008, 18:05
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Re: Metodo definido function __get (). Como funciona ?

El problema es que self, siempre se refiere a la misma clase, puedes a lo mejor guardar en la clase padre un apuntador al padre usando la constante __CLASS__.

Saludos.
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 11:15.