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 值仍然包含常量的 NAME,而不是 VALUE。

我尝试了第二级间接 $$constant_name,但这将使它成为一个变量,而不是一个常数。

有人能帮我解释一下吗?

50647 次浏览

And to demonstrate that this works with class constants too:

class Joshua {
const SAY_HELLO = "Hello, World";
}


$command = "HELLO";
echo constant("Joshua::SAY_$command");

To use dynamic constant names in your class you can use reflection feature (since php5):

$thisClass = new ReflectionClass(__CLASS__);
$thisClass->getConstant($constName);

For example: if you want to filter only specific (SORT_*) constants in the class

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());

result:

array (size=2)
0 => int 1
1 => int 2