En PHP 5 hay sin duda alguna muchísimo más soporte en la Programación Orientada a Objetos con respecto a PHP 4 , una de ellas es el acceso a propiedades y métodos que nos permite a hacer clases muchas más robustas.
Desde PHP 5 es posible la definición de constantes de clase. Ejemplo:
Código :
class MyClass { const MY_CONSTANT = "Constante de Clase"; }
echo MyClass::MY_CONSTANT;
Sin duda esto nos sirve de mucho en una aplicación orientada a objetos en php. A pesar de lo bueno que es esto tiene sus "limitaciones", pues aunque parezca una idea loca a veces no sabemos en tiempo de ejecución como se llama el nombre de la clase y aqui es donde nos viene el problema con las constantes de clase, porque ellas no pueden ser accedidas directamente desde una instancia. Ejemplo:
Código :
class MyClass { const MY_CONSTANT = "Constante de clase"; }
$instance = new MyClass(); echo $instance::MY_CONSTANT; //Error echo $instance->MY_CONSTANT; //un intento desesperado pero da error
Para solventar este problema deberíamos definir las constantes comos propiedades estáticas o simplemente como propiedades, pero eso atentaría con la definición de la propiedad pues es una constante no es variable. La solución a esto sin atentar con la definición de la propiedad es apoyarnos de los métodos mágicos que nos ofrece PHP. Ejemplo:
Código :
class MyClass { const MY_CONSTANT = "Constante de clase"; private function __get($name) { if(defined("self::$name")) { return constant("self::$name");
} trigger_error ("$name isn't defined"); } }
$instance = new MyClass(); echo $instance->MY_CONSTANT; //¡¡esto funciona!!
[En PHP 5 hay sin duda alguna muchísimo más soporte en la Programación Orientada a Objetos con respecto a PHP 4 , una de ellas es el acceso a propiedades y métodos que nos permite a hacer clases muchas más robustas. Desde PHP 5 es posible la definición de constantes de clase...] Por:Fresqui_blog
Muy buen aporte Maikel, pues no se aprecia a simple vista una solución para el problema que planteabas, pero con ese modo de acceso, solventamos muchas situaciones, sobre todo al usar técnicas en las que las clases se instancien de manera dinámica y abstracta.
Insisto, un gran aporte me lo apunto Por:MorphX
Muy bueno. Por:RetroFOX_blog
Ciertamente correcto Por:GersonM_blog
Muy bueno! Por:Cecilia_blog
Me sirvio de mucho - gracias Espero te estiendas un poco aqui protonto estare listo para hecharte una mano Por:Ronald _blog
¿Se podria hacer algo similar para acceder con el operador -> a los metodos y propiedades estaticas? Por:pitxon-blog