从函数中调用非全局变量


Call a non-global variable from a function?

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

EDIT:我刚刚发现,从函数内部访问的变量需要是参数之一!这可能是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的值。这是怎么做到的?

插件定义看起来像这样吗:

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

而不是通过引用。如果它确实是您在上面发布的方式,那么它的调用时间通过引用,这是不推荐的,并从PHP 5.3开始发出警告。