dongxiandi8313 2012-07-17 02:53 采纳率: 100%
浏览 47
已采纳

从函数中调用非全局变量?

During the development of a Joomla! plugin, I ran across something really interesting. One of the events does not have a return value, but it calls variables from inside the function. Prior knowledge tells me this should only work if the variables are global inside the function, yet the dispatcher is able to call the variables from outside the function.

EDIT: I just discovered that the variable that is accessed from inside the function needs to be one of the paramaters! Could this be func_get_params() or call_user_func()?

Calling Code:

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

Plugin (snippet):

class plgMyPlugin extends JPlugin{

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

This function returns false, yet somehow the application (Joomla!) is able to extract the value of $link. How is this done?

  • 写回答

1条回答 默认 最新

  • dqssst0144 2012-07-25 00:15
    关注

    Does the plug-in definition look like this:

    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.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 关于Java的学习问题
  • ¥15 如何使用chatgpt完成文本分类任务?
  • ¥15 已知速度v关于位置s的等式,怎么转化为已知位置求速度v的等式
  • ¥15 我有个餐饮系统,用wampserver把环境配置好了,但是后端的网页却进去,是为什么,能不能帮远程一下?
  • ¥15 R运行没有名称为"species"的插槽对于此对象类"SDMmodelCV"
  • ¥20 基于决策树的数字信号处理,2ask 2psk 2fsk的代码,检查下报错的原因
  • ¥15 wincc已组态的变量过多
  • ¥60 如图:直线与椭圆X轴平行,求直线与椭圆任意一点的相切坐标计算公式
  • ¥50 如何用python使用opencv里的cv::cudacodec::VideoWriter函数对视频进行GPU硬编码
  • ¥100 c#solidworks 二次开发 工程图自动标边线法兰 等折弯尺寸怎么标