正确使用call_user_func_array

时间:2012-04-17 18:58:41

标签: php callback smarty argument-passing lithium

我正在尝试使用smarty来扩展Lithium PHP,除了我的smarty插件之外,一切正常,以允许访问锂助手。

我聪明的功能意味着锂电助手的“收获”。我正在努力的部分是动态地将助手参数添加到我的回调中。

简化代码

$params = array('Google', 'http://www.google.com');

$helper = function($args){  
    return $this->html->link($args);
};

return call_user_func_array($helper, $params);

此结果为<a href="/Google">Google</a>

进一步测试表明,上面只将$ params数组中的第一项传递给回调...奇怪。所以我把它包装在自己的数组中。拿那个,我无法解释的事情!

return call_user_func_array($helper, array($params));

这会产生一个我不会进入的锂错误,但是看起来帮助器正在传递一个数组,而不是将数组中的参数作为单独的参数传递。

错误代码段 '找不到网址( 0 => 'Google', 1 => 'http://www.google.com', 'controller' => 'pages', 'action' => 'index')的参数匹配。

所以我认为我错过了使用call_user_func_array方法。

如果你能想到一个更好的方法来动态地传递任何数量的参数,那么我就不会出售这个是实现我目标的唯一解决方案。

  

请注意:$ this-&gt; html - &gt; link是解释我的问题的简化方法,html和{{1该对象的部分实际上将动态更改,因此需要完全动态的函数参数。

2 个答案:

答案 0 :(得分:2)

$helper仅使用一个参数声明,只有一个转移到$this->html->link

为什么不直接使用call_user_func_array(array($this->html, 'link'), array($params));

答案 1 :(得分:0)

你为什么不这样做

return $helper($params);

在我看来,不需要call_user_func_array() 或者请澄清你为什么要这样,因为对我来说这是有效的。