Comunidad de diseño web y desarrollo en internet online

Como usar y acceder a constantes en clases de PHP

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!!

Más información sobre esto:
Constantes De la Clase [PHP.net]

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate