是否可以组成常量名称?

时间:2017-01-17 12:07:19

标签: php

有没有办法在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;

我不能在这里使用变量,因为我使用的是预定义的共享类,它已包含这些值。

提前致谢

3 个答案:

答案 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

constant()

答案 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"];