常量数组值作为数组索引在foreach中不起作用

时间:2018-11-08 16:50:51

标签: php arrays class constants

我将一个类字段定义为数组常量。 然后,我尝试使用该数组字段值作为另一个数组中的索引:

class A
{
    const NAMES = Array(
        "A",
    );

    static function run()
    {
        $arr = array("A"=>"123");


        $arNames = constant('self::NAMES');

        foreach ($arNames as $name) {
            echo '$name=' . $name . '<BR>';
            echo '$arr[$name]=' . $arr[$name] . '<BR>';
        }

        $name2=$arNames[0];
        echo '<BR>'.'$name2=' . $name2 . '<BR>';
        echo '$arr[$name2]=' . $arr[$name2] . '<BR>';
    }
}

A::run();

在PHP 7.1.23下的一台服务器上,它工作正常,输出为:

$name=A
$arr[$name]=123

$name2=A
$arr[$name2]=123

但是在具有相同PHP,库等的另一台服务器上,它却无法正常工作。它将 $ arr [$ name] 设置为 foreach 循环中的 NULL 。但是按数字索引的直接请求也可以正常工作:

$name=A
$arr[$name]=

$name2=A
$arr[$name2]=123

使用常量数组是否有任何限制? 我没有在http://php.net/manual/ru/language.constants.syntax.php上找到任何东西。

添加 现在,我了解了服务器之间的区别。如果启用了 opcode ,则循环blok会出错。

0 个答案:

没有答案