我目前正在处理其他人为WordPress撰写的破碎主题.全新安装后会抛出500错误.检查我的本地机器上的代码后,我能够提示以下内容:
public static function skip_script($conf) {
$hook_suffix = isset($GLOBALS['hook_suffix']) ? $GLOBALS['hook_suffix'] : null;
if (isset($conf['variable'])) {
global $$conf['variable'];
}
$conditions = array(
'variable' => isset($conf['variable']) && (!isset($$conf['variable']) || !$$conf['variable']),
'hook_suffix' => isset($conf['hook_suffix']) && (is_null($hook_suffix) || $conf['hook_suffix'] != $hook_suffix)
);
return in_array(true, array_values($conditions), true);
}
Run Code Online (Sandbox Code Playgroud)
这对于这个:
if (isset($conf['variable'])) {
global $$conf['variable']; # What the heck is this?
}
Run Code Online (Sandbox Code Playgroud)
我可以检查PHP错误日志并在服务器上重现相同的错误:
PHP Parse error: syntax error, unexpected '[', expecting ',' or ';'
众所周知,这个WordPress主题在过去有效,但在过去的3年中似乎已被抛弃.
让我谈谈问题的核心:global $$conf['variable'];应该做些什么.我假设这是不推荐使用的代码,因为它之前已经有用了.
这看起来像一个动态变量.我认为它正在尝试使用名称全局变量$conf['variable'].
您可以像这样修复错误,只需用花括号括起来:
global ${$conf['variable']};
Run Code Online (Sandbox Code Playgroud)
这确实在PHP 7的新版本中进行了更新/更改,如下所示:
对间接变量,属性和方法的处理的更改
现在,将严格按照从左到右的顺序对间接访问变量,属性和方法进行评估,而不是之前的特殊情况组合.下表显示了评估顺序的变化情况.
Run Code Online (Sandbox Code Playgroud)Old and new evaluation of indirect expressions | Expression | PHP 5 interpretation | PHP 7 interpretation | |---------------------|-----------------------|-----------------------| | $$foo['bar']['baz'] | ${$foo['bar']['baz']} | ($$foo)['bar']['baz'] | | $foo->$bar['baz'] | $foo->{$bar['baz']} | ($foo->$bar)['baz'] | | $foo->$bar['baz']() | $foo->{$bar['baz']}() | ($foo->$bar)['baz']() | | Foo::$bar['baz']() | Foo::{$bar['baz']}() | (Foo::$bar)['baz']() |必须重写使用旧的从右到左评估顺序的代码,以明确使用带花括号的评估顺序(请参阅上面的中间列).这将使代码向前兼容PHP 7.x并向后兼容PHP 5.x.
| 归档时间: |
|
| 查看次数: |
43 次 |
| 最近记录: |