我的主机突然改变了一些东西,现在我的网站(大多数 wp - 100 左右)出现了臭名昭著的错误。Invalid opcode 153/1/8
负责它的线路:
$f = function() use ($out) {
echo $out;
};
经过 2 分钟的研究,罪魁祸首似乎是 eAccelerator ,它不支持匿名函数
以下两个问题也将错误归咎于 eAccelerator:
https://stackoverflow.com/a/12085901/1244126
有趣的事实:相同的代码已经出现在我自己 在 SE和这里的 2 个问题的主题之前 ,我在使用带有较旧 PHP 版本 (< 5.3 ) 的匿名函数时遇到了一个问题create_function
$f = create_function(' $out ',' global $out; echo $out;');
所以,我的问题是:我怎样才能以一种可以避免 eAccelerator 错误并且适用于所有 php 版本的方式更改我的代码。(我不太可能说服我的主人改变它的一些东西)
编辑我:
为了清楚起见(虽然可能有点无关紧要 - 问题是如何拥有交叉兼容的匿名函数) - 我发布了整个相关代码......
if ( count( $content_widget ) > 0 ) { // avoid error when no widget...
$i=0;
foreach ( $content_widget as $wid ){
$out = null;
$i++;
$widg_id = 'o99_dashboard_widget_dyn_' . $i;
$widg_name = 'widget name - ' . $i;
$out = $wid;
// $f = create_function('$out','global $out;echo $out;');
// $f = create_function('', 'global $out; echo $out ;');
$f = function() use ($out) {
echo $out;
};
// function() use ($out) // NOPE
// $f = $f($out); // NOPE again
wp_add_dashboard_widget($widg_id, $widg_name, $f);
// $i++;
}
}
这只是在 wp 管理区域中动态创建仪表板小部件的简单代码..