call_user_func_array vs $ controller - > $ method($ params)?

Ada*_*han 6 php

我在我的代码中使用它:

 call_user_func_array ( array ($controller, $method ), $this->params );
Run Code Online (Sandbox Code Playgroud)

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

 $controller->$method($this->params);
Run Code Online (Sandbox Code Playgroud)

这两个版本有什么区别吗?

谢谢

亚当拉马丹

mar*_*rio 5

他们的工作方式相似.唯一显着的区别是$controller->$nonexistant()会产生致命错误.虽然call_user_func_array只有E_WARNING失败不应该$method存在.

有趣的事实.如果你的$ controller有一个闭包$方法,那么你实际上必须结合两种方法:

call_user_func_array ( $controller->$method, $this->params );
Run Code Online (Sandbox Code Playgroud)


igo*_*orw 5

他们不一样.

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

$controller->showAction(2, 'some-slug');
Run Code Online (Sandbox Code Playgroud)

而第二个是:

$controller->showAction(array(2, 'some-slug'));
Run Code Online (Sandbox Code Playgroud)

您要使用哪一个取决于系统其余部分的工作方式(特别是您的控制器).我个人可能会选择第一个.

  • 任何性能差异都只是少数几个操作码,所以不要担心这一点. (2认同)