2012-07-17 102 views
1

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

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

长途区号:

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

插件(片段):(Joomla!功能)

class plgMyPlugin extends JPlugin{ 

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

该函数返回false,但不知怎么的应用程序能够提取$环节的价值。这是如何完成的?

+1

你能发布一个链接到有问题的(完整)代码吗? – drew010 2012-07-17 03:35:40

+0

实际的代码是Joomla的一部分,特别是JDisplatcher类。上面我添加的“调用代码”是调用插件的组件中的代码。 – alecwhardy 2012-07-17 04:42:05

+1

谢谢你的帮助。 – drew010 2012-07-17 04:50:36

回答

1

是否插件定义是这样的:

class plgMyPlugin extends JPlugin{ 

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

比它的pass by reference。如果它确实是你在上面发布的方式,而不是推荐的引用时间通过引用,并且从PHP 5.3开始发出警告。