una predefinidas hacer expresiones definidas constantes constante como php class variables constants

predefinidas - expresiones de php



Accediendo a una constante de clase usando una variable simple que contiene el nombre de la constante (5)

Estoy intentando acceder a una constante de clase en una de mis clases:

const MY_CONST = "value";

Si tengo una variable que contiene el nombre de esta constante como esta:

$myVar = "MY_CONST";

¿Puedo acceder al valor de MY_CONST de alguna manera?

self::$myVar

no funciona obviamente porque es para propiedades estáticas. Las variables variables tampoco funcionan.


¿Puedo acceder al valor de MY_CONST de alguna manera?

self::MY_CONST

Si desea acceder de forma dinámica, puede usar los Documentos API de reflexión :

$myvar = ''MY_CONST''; $class = new ReflectionClass(self); $const = $class->getConstant($myVar);

El beneficio con la API de reflexión puede ser que puede obtener todas las constantes a la vez ( getConstants ).

Si no le gusta la API de reflexión porque no quiere usarla, una alternativa es la función constant ( Demo ):

$myvar = ''MY_CONST''; class foo {const MY_CONST = ''bar'';} define(''self'', ''foo''); echo constant(self.''::''.$myvar);


Hay dos formas de hacer esto: usar la función constant o usar la reflection .

Función constante

La función constante funciona con constantes declaradas a través de las constantes de define y de clase:

class A { const MY_CONST = ''myval''; static function test() { $c = ''MY_CONST''; return constant(''self::''. $c); } } echo A::test(); // output: myval

Clase de reflexión

Una segunda, más laboriosa, sería a través de la reflexión:

$ref = new ReflectionClass(''A''); $constName = ''MY_CONST''; echo $ref->getConstant($constName); // output: myval


No hay sintaxis para eso, pero puede usar una búsqueda explícita:

print constant("classname::$myConst");

Creo que también funciona con self:: .


Solo una nota para Reflection: el constructor de ReflectionClass debe recibir la ruta completa de la clase para su parámetro. Esto significa que simplemente configurar la cadena ''A'' como un parámetro constructor puede no funcionar en algunos casos.

Para evitar este problema, al usar ReflectionClass, será mejor si hace esto:

$classA = new A(); $name_classA = get_class($classA); $ref = new ReflectionClass(get_class($name_classA)); $constName = ''MY_CONST''; echo $ref->getConstant($constName);

La función get_class le dará la ruta completa de una clase siempre que esté en el código. Si se pierde la ruta completa, puede producirse un error PHP de "Clase no encontrada".


has probado

$myVar = MY_CONST or $myVar = $MY_CONST