Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   Frameworks y PHP orientado a objetos (http://www.forosdelweb.com/f68/)
-   -   Metodo definido function __get (). Como funciona ? (http://www.forosdelweb.com/f68/metodo-definido-function-__get-como-funciona-470771/)

Calisco 07/03/2007 03:41

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.

GatorV 07/03/2007 09:42

Re: Metodo definido function __get (). Como funciona ?
 
jejej tanto para hacer esto:
Código PHP:

echo MyClass::MY_CONSTANT


Fridureiks 07/03/2007 09:42

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

Calisco 07/03/2007 09:49

Re: Metodo definido function __get (). Como funciona ?
 
Gracias Fridureiks. Esto es propio de PHP, no es cierto ?. Poco tiene que ver con POO. pregunto ...

GatorV 07/03/2007 10:02

Re: Metodo definido function __get (). Como funciona ?
 
Asi es son metodos magicos, leelos en el manual, son __get, __set, __unset, __isset, __sleep, __wakeup, __call.

jerkan 28/02/2008 17:36

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?

GatorV 28/02/2008 18:05

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.


La zona horaria es GMT -6. Ahora son las 22:55.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.