Estoy tratando de crear un nombre constante de forma dinámica 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 indirección, $$constant_name
pero eso lo convertiría en una variable, no en una constante.
¿Alguien puede arrojar algo de luz sobre esto?
php
constants
indirection
vikmalhotra
fuente
fuente
::class
constante se puede usar para recuperar el espacio de nombres completo, por ejemplo:constant(YourClass::class . '::CONSTANT_' . $yourVariable);
::class
palabra clave está disponible desde php 5.5Para usar nombres de constantes dinámicas 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
fuente