Постоянное значение массива как индекс массива не работает в foreach - PullRequest
0 голосов
/ 08 ноября 2018

Я определяю поле класса как константу массива. Затем я пытаюсь использовать значения полей этого массива в качестве индекса в другом массиве:

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, libs и так далее. Он устанавливает $ arr [$ name] на NULL в цикле foreach . Но прямой запрос по числовому индексу тоже отлично работает:

$name=A
$arr[$name]=

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

Есть ли ограничения на использование константных массивов? Я ничего не нашел в http://php.net/manual/ru/language.constants.syntax.php или в другом месте.

Добавление Теперь я узнаю разницу между серверами. Если код операции включен, блок цикла работает неправильно.

...