Я пытаюсь создать постоянное имя динамически, а затем получить значение.
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 по-прежнему содержит NAME константы, а не VALUE.
Я попробовал второй уровень косвенности, а также $$constant_name
Но это сделало бы его переменной не константой.
Может кто-нибудь пролить свет на это?
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