有没有办法在PHP中调用/组合一个常量名,这不需要使用eval?
我的意思是,我在这个架构后面有几个常量名称:
define("CONSTANT_0", "foo 0");
define("CONSTANT_1", "foo 1");
define("CONSTANT_2", "foo 2");
我希望能够在循环中浏览这些值,如下所示:
for ($i=0; $i<3; $i++)
echo CONSTANT_$i;
我不能在这里使用变量,因为我使用的是预定义的共享类,它已包含这些值。
提前致谢
答案 0 :(得分:2)
这会有所帮助 -
define("CONSTANT_0", "foo 0");
define("CONSTANT_1", "foo 1");
define("CONSTANT_2", "foo 2");
for ($i=0; $i<3; $i++) {
echo constant('CONSTANT_' . $i);
}
<强>输出强>
foo 0foo 1foo 2
答案 1 :(得分:1)
如果您想要一种非常强大的搜索常量或只返回特定常量的方法,可以使用defined()
,get_defined_constants()
和constant()
:
define("CONSTANT_0", "foo 0");
define("CONSTANT_1", "foo 1");
define("CONSTANT_2", "foo 2");
define("NOT_1", "bar 1");
$all_constants = get_defined_constants(true);
$search = 'CONSTANT_';
for ($i = 0; $i < count($all_constants['user']); $i++) {
if(defined($search . $i)){
echo constant($search . $i);
}
}
您定义的常量将始终位于&#39;用户&#39;从get_defined_constants()
返回的数组(调用此函数时至少返回3个子数组)。您可以统计用户&#39;数组,然后确定您的搜索词是否已定义。正如您在上面的示例中所看到的,只有那些使用搜索词CONSTANT_
定义的常量才会在循环期间回显。
如果您想要其他方法,请考虑以下功能:
function returnMyConstants ($prefix) {
$defined_constants = get_defined_constants(true);
foreach ($defined_constants['user'] as $key => $value) {
if (substr($key, 0, strlen($prefix)) == $prefix) {
$new_array[$key] = $value;
}
}
if(empty($new_array)) {
return "Error: No Constants found with prefix '$prefix'";
} else {
return $new_array;
}
}
print_r(returnMyConstants('CONSTANT_'));
此功能的输出为:
Array
(
[CONSTANT_0] => foo 0
[CONSTANT_1] => foo 1
[CONSTANT_2] => foo 2
)
此功能可让您搜索用户&#39;部分定义的常量,然后使用众所周知的数组解析方法。该函数可以很容易地修改,但返回一个带有正确前缀的常量数组。它更加便携,不需要对搜索值进行硬编码。
答案 2 :(得分:0)
我可以使用函数get_defined_constants迭代你的常量,该函数返回一个带有所有用户定义常量和PHP常量的关联数组(与其值相关联的常量名称)
迭代(用户定义的)常量:$c = get_defined_constants(true)["user"];