Динамическое имя константы в PHP
Я пытаюсь создать постоянное имя динамически, а затем получить значение.
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 value по-прежнему содержит имя константы, а не значение.
я попробовал второй уровень косвенности, а также $$constant_name
но это сделало бы его переменной, а не константой.
может кто-нибудь пролить свет на это?
3 ответа:
http://dk.php.net/manual/en/function.constant.php
echo constant($constant_name);
и чтобы продемонстрировать, что это работает с константами класса тоже:
class Joshua { const SAY_HELLO = "Hello, World"; } $command = "HELLO"; echo constant("Joshua::SAY_$command");
для использования динамических имен констант в вашем классе вы можете использовать функцию отражения (начиная с 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