Я пытаюсь создать постоянное имя динамически, а затем получить значение.
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;
Но я обнаружил, что значение $ constant по-прежнему содержит ИМЯ константы, а не ЗНАЧЕНИЕ.
Я тоже пробовал второй уровень косвенного обращения, $$constant_name
но это сделало бы его переменной, а не константой.
Может кто-нибудь пролить свет на это?
php
constants
indirection
Викмалхотра
источник
источник
::class
Константу можно использовать для получения полного пространства имен, например:constant(YourClass::class . '::CONSTANT_' . $yourVariable);
::class
ключевое слово доступно с php 5.5Чтобы использовать динамические имена констант в своем классе, вы можете использовать функцию отражения (начиная с php5):
$thisClass = new ReflectionClass(__CLASS__); $thisClass->getConstant($constName);
Например: если вы хотите отфильтровать только определенные (SORT_ *) константы в классе
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());
результат:
array (size=2) 0 => int 1 1 => int 2
источник