2011-03-20 97 views
5

我是在我的代码中使用这样的:

call_user_func_array (array ($controller, $method), $this->params); 

,但我发现下面的代码做同样的事情:

$controller->$method($this->params); 

有两个版本之间有什么区别?

感谢

亚当·拉马丹

回答

5

它们不一样。

如果$methodshowAction$this->paramsarray(2, 'some-slug'),那么第一次调用将相当于:

$controller->showAction(2, 'some-slug'); 

而第二个是:

$controller->showAction(array(2, 'some-slug')); 

你想使用哪一个取决于系统的其他部分如何工作(尤其是您的控制器)。我个人可能会与第一。

+0

啊我看到了,所以如果我们想使用参数,第一个将是($ number,$ string)第二个$ data ['0'] $ data ['1'],那么它们的性能如何?有什么区别? ( 重大的 ) ?如果没有,那么也许我应该坚持第一个。因为是我的申请得到了相当的看法。 – 2011-03-20 15:09:41

+2

任何性能差异将只是一小部分操作码,所以不要担心这一点。 – Charles 2011-03-20 16:35:27

0

他们正在做同样的事情,但第二种形式是更短,更清晰,速度更快。喜欢它。

4

他们一样工作。唯一重要的区别是$controller->$nonexistant()会产生致命错误。而call_user_func_array失败,只有一个E_WARNING应该$method不存在。

有趣的事实。如果您的$控制器包含关闭$方法,那么您实际上必须结合两种方法:

call_user_func_array ($controller->$method, $this->params); 
相关问题