Ich versuche, einen konstanten Namen dynamisch zu erstellen und dann zum Wert zu gelangen.
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;
Aber ich finde, dass der Wert der $ Konstante immer noch den NAMEN der Konstante enthält und nicht den WERT.
Ich habe auch die zweite Indirektionsebene ausprobiert. $$constant_name
Aber das würde es zu einer Variablen und nicht zu einer Konstanten machen.
Kann jemand etwas Licht darauf werfen?
php
constants
indirection
Vikmalhotra
quelle
quelle
::class
Konstante kann verwendet werden, um den vollständig qualifizierten Namespace abzurufen, zum Beispiel:constant(YourClass::class . '::CONSTANT_' . $yourVariable);
::class
Schlüsselwort seit PHP 5.5Um dynamische Konstantennamen in Ihrer Klasse zu verwenden, können Sie die Reflexionsfunktion verwenden (seit PHP5):
$thisClass = new ReflectionClass(__CLASS__); $thisClass->getConstant($constName);
Beispiel: Wenn Sie nur bestimmte (SORT_ *) Konstanten in der Klasse filtern möchten
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());
Ergebnis:
array (size=2) 0 => int 1 1 => int 2
quelle