使用匿名函数时操作码 153/1/8 无效



我的主机突然改变了一些东西,现在我的网站(大多数wp - 大约100个)得到了臭名昭著的错误Invalid opcode 153/1/8

负责它的线路:

$f = function() use ($out) {
    echo $out;
};

经过2分钟的研究,罪魁祸首似乎是 电子加速器 ,它不支持匿名功能

以下两个问题也将错误归咎于电子加速器:

无效操作码和php排序函数,

https://stackoverflow.com/a/12085901/1244126

有趣的事实:相同的代码已经在我自己的 SE 和这里 2 个问题的主题之前,我在使用具有旧PHP版本(<5.3)的匿名函数,create_function

$f = create_function(' $out ',' global $out; echo $out;');

所以,我的问题是:我怎样才能以一种可以避免电子加速器错误的方式更改我的代码,并且可以在所有 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管理区域中动态创建仪表板小部件的简单代码。

他们似乎正在使用call_user_func

因此,您可以创建新对象并传递可调用数组。

class s {
    private $_out = null;
    public function __construct($out){
        $this->_out = $out;
    }
    public function a(){
        echo $this->_out;
    }
}
$function = array(new S('my out'), 'a');
var_dump(is_callable($function));
call_user_func($function);

相关内容

  • 没有找到相关文章

最新更新