在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开始发出警告。