PHP 5.6中的动态变量行为

时间:2018-07-30 15:01:53

标签: php php-5.6

我在下面创建了代码,但仅适用于PHP 7+版本。

要在$$variablename[$key]的5.6版上运行,我需要在此处进行哪些更改?

Online PHP test

$g_module_id_bar_1['id'] = 5;

$i = 1;

$variablename = 'g_module_id_bar_'.$i;
$key = 'id';

echo $$variablename[$key];  // doesn't work

结果应为: 5

1 个答案:

答案 0 :(得分:3)

在PHP 5中,您应该编写

echo ${$variablename}[$key];

您的问题中的代码在PHP 7中起作用的原因是PHP 7引入了对间接变量处理方式的更改:

  

现在将严格按照从左到右的顺序评估对变量,属性和方法的间接访问,与之前的特殊情况相反。下表显示了评估顺序如何变化。

更具体地说,以下表达式: $$foo['bar']['baz']

在PHP 5中解释为: ${$foo['bar']['baz']}

在PHP 7中: ($$foo)['bar']['baz']

来源:http://php.net/manual/en/migration70.incompatible.php#migration70.incompatible.variable-handling.indirect