自从从 5.5.22 升级到 5.6.6 后,无法将变量变量传递到 PHP 中的函数中?

Can't pass a variable variable into a function in PHP since upgrading from 5.5.22 to 5.6.6?

提问人:Codemonkey 提问时间:3/2/2015 最后编辑:Codemonkey 更新时间:3/4/2015 访问量:123

问:

在我升级之前,这行代码运行良好,现在没有:

123: $thisRow[] = displayR(${"sR{$i}S1"}, ${"nR{$i}S1P"});

我收到此错误:

Undefined variable: sR1S1 in script.php on line 123

解决方法是先手动分配它们

$s = ${"sR{$i}S1"};
$n = ${"nR{$i}S1P"};
$thisRow[] = displayR($s, $n);

有没有办法让它像以前一样在一行中工作?有谁知道为什么它不再有效?

我应该补充一点,我已经尝试过使用

var_dump(${"sR{$i}S1"});
在上一行,它被定义,并具有我期望的值。

我在谷歌或 SO 上找不到任何关于这种行为的提及,我想知道这是否是一个错误而不是故意的。

变量 php-5.6

评论

1赞 Mark Baker 3/2/2015
显然,收紧草率的编码实践是一个错误:如果在将变量传递给函数时没有定义变量,那么该函数应该做什么?
0赞 Mark Baker 3/2/2015
PHP 通知未定义的变量和通知未定义的索引
0赞 Codemonkey 3/2/2015
变量是@Mark定义的。我可以在上一行var_dump它们,它们就在那里,正如预期的那样。var_dump(${“sR{$i}S1”}) 按预期输出一个值。
0赞 Mark Baker 3/2/2015
好吧,如果您认为这是一个错误,请将其标记为 PHP 核心开发人员的错误
1赞 deceze 3/2/2015
让我这样说:使用这样的变量而不是数组,这散发着可怕的做法。我们没有任何确凿的证据证明这个程序应该有效,因为我们没有完整的测试用例。首先复制的测试用例是工作。鉴于这一切,我发现您的程序更有可能有一些错误,而不是 PHP。您必须提供一个完整的可重复示例,以便我们能够说出其他情况。

答:

0赞 Codemonkey 3/4/2015 #1

我相信这是一个 opcache 错误。

在相关文件上禁用 opcache 将恢复预期行为。

我在以下位置提交了一份(相当无用的)错误报告:

https://bugs.php.net/bug.php?id=69159

显然已修复并关闭:

http://git.php.net/?p=php-src.git;a=commitdiff;h=a29b64fc1029b4121e3e9ff20901c35ad600b4da