1

在开发 Joomla! 插件,我遇到了一些非常有趣的东西。其中一个事件没有返回值,但它从函数内部调用变量。先验知识告诉我,这只有在函数内部的变量是全局的时才有效,但调度程序能够从函数外部调用变量。

编辑:我刚刚发现从函数内部访问的变量需要是参数之一!这可能是 func_get_params() 还是 call_user_func()?

调用代码:

$instance = JDispatcher::getInstance();
$instance->trigger(onJoomCalledEvent, array(&$link, $other_params));

插件(片段):

class plgMyPlugin extends JPlugin{

    onJoomCalledEvent($link, $other_params){
        $link = "Some Value Here";
        return false;
    }
}

此函数返回 false,但不知何故,应用程序 (Joomla!) 能够提取 $link 的值。这是怎么做到的?

4

1 回答 1

1

插件定义是否如下所示:

class plgMyPlugin extends JPlugin{

    onJoomCalledEvent(&$link, $other_params){
        $link = "Some Value Here";
        return false;
    }
}

Than it's pass by reference. If it's indeed the way you posted above than it's call time pass by reference which is deprecated and emits a warning starting with PHP 5.3.

于 2012-07-25T00:15:33.910 回答