Próbuję dynamicznie utworzyć stałą nazwę, a następnie uzyskać wartość.
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;
Ale uważam, że $ stała wartość nadal zawiera NAZWĘ stałej, a nie WARTOŚĆ.
Próbowałem również drugiego poziomu pośredniego, $$constant_name
ale to uczyniłoby to zmienną, a nie stałą.
Czy ktoś może rzucić na to trochę światła?
php
constants
indirection
vikmalhotra
źródło
źródło
::class
Stała może służyć do pobierania w pełni kwalifikowanej przestrzeni nazw, na przykład:constant(YourClass::class . '::CONSTANT_' . $yourVariable);
::class
słowo kluczowe jest dostępne od php 5.5Aby używać dynamicznych nazw stałych w swojej klasie, możesz użyć funkcji odbicia (od php5):
$thisClass = new ReflectionClass(__CLASS__); $thisClass->getConstant($constName);
Na przykład: jeśli chcesz filtrować tylko określone (SORT_ *) stałe w klasie
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());
wynik:
array (size=2) 0 => int 1 1 => int 2
źródło