Retroceder   Foros del Web > Programación para sitios web > PHP > PHP orientado a objetos

Respuesta
 
Herramientas Desplegado
Antiguo 07-mar-2007, 02:41   #1 (permalink)
Calisco tiene algunos puntos positivos de karma
 
Avatar de Calisco
 
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 679
Enviar un mensaje por ICQ a Calisco Enviar un mensaje por MSN a Calisco
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 | Foro MooTools en Castellano |
Calisco está desconectado   Responder Citando
Antiguo 07-mar-2007, 08:42   #2 (permalink)
Moderador
GatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy pronto
 
Avatar de GatorV
 
Fecha de Ingreso: mayo-2006
Ubicación: Queretaro, Mexico
Mensajes: 11.280
Re: Metodo definido function __get (). Como funciona ?

jejej tanto para hacer esto:
Código PHP:
echo MyClass::MY_CONSTANT
GatorV está desconectado   Responder Citando
Antiguo 07-mar-2007, 08:42   #3 (permalink)
Fridureiks ha deshabilitado el karma
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.237
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
Fridureiks está desconectado   Responder Citando
Antiguo 07-mar-2007, 08:49   #4 (permalink)
Calisco tiene algunos puntos positivos de karma
 
Avatar de Calisco
 
Fecha de Ingreso: marzo-2004
Ubicación: Neuquen
Mensajes: 679
Enviar un mensaje por ICQ a Calisco Enviar un mensaje por MSN a Calisco
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 | Foro MooTools en Castellano |
Calisco está desconectado   Responder Citando
Antiguo 07-mar-2007, 09:02   #5 (permalink)
Moderador
GatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy pronto
 
Avatar de GatorV
 
Fecha de Ingreso: mayo-2006
Ubicación: Queretaro, Mexico
Mensajes: 11.280
Re: Metodo definido function __get (). Como funciona ?

Asi es son metodos magicos, leelos en el manual, son __get, __set, __unset, __isset, __sleep, __wakeup, __call.
GatorV está desconectado   Responder Citando
Antiguo 28-feb-2008, 16:36   #6 (permalink)
jerkan tiene algunos puntos positivos de karma
 
Avatar de jerkan
 
Fecha de Ingreso: septiembre-2005
Mensajes: 1.361
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?
__________________
jerkan.net
jerkan está desconectado   Responder Citando
Antiguo 28-feb-2008, 17:05   #7 (permalink)
Moderador
GatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy prontoGatorV llegará a ser famoso muy pronto
 
Avatar de GatorV
 
Fecha de Ingreso: mayo-2006
Ubicación: Queretaro, Mexico
Mensajes: 11.280
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.
__________________
Blog Web
GatorV está desconectado   Responder Citando
Respuesta
No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 01:22.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93