sintaxis predefinidas expresiones definidas constantes comandos php constants indirection

predefinidas - Nombre constante dinámico en PHP



sintaxis de php 7 (3)

Para usar nombres de constantes dinámicos en su clase, puede usar la función de reflexión (desde php5):

$thisClass = new ReflectionClass(__CLASS__); $thisClass->getConstant($constName);

Por ejemplo: si desea filtrar solo constantes específicas (SORT_ *) en la clase

class MyClass { const SORT_RELEVANCE = 1; const SORT_STARTDATE = 2; const DISTANCE_DEFAULT = 20; public static function getAvailableSortDirections() { $thisClass = new ReflectionClass(__CLASS__); $classConstants = array_keys($thisClass->getConstants()); $sortDirections = []; foreach ($classConstants as $constName) { if (0 === strpos($constName, ''SORT_'')) { $sortDirections[] = $thisClass->getConstant($constName); } } return $sortDirections; } } var_dump(MyClass::getAvailableSortDirections());

resultado:

array (size=2) 0 => int 1 1 => int 2

Estoy tratando de crear un nombre constante dinámicamente y luego obtener el valor.

define( CONSTANT_1 , "Some value" ) ; // try to use it dynamically ... $constant_number = 1 ; $constant_name = ("CONSTANT_" . $constant_number) ; // try to assign the constant value to a variable... $constant_value = $constant_name;

Pero encuentro que $ valor constante todavía contiene el NOMBRE de la constante, y no el VALOR.

También probé el segundo nivel de direccionamiento indirecto $$constant_name Pero eso lo convertiría en una variable, no en una constante.

¿Alguien puede arrojar algo de luz sobre esto?


Y para demostrar que esto también funciona con constantes de clase:

class Joshua { const SAY_HELLO = "Hello, World"; } $command = "HELLO"; echo constant("Joshua::SAY_$command");