call_user_func_array和带有argumet开箱/三个点(…$ array)的调用之间有什么区别?

问题描述 投票:0回答:1

我发现了两个如何在以$function为数组提供的$instance上动态调用$arguments的解决方案。

带有call_user_func_array的版本

call_user_func_array

使用三点符号$result = call_user_func_array(array($instance, $function), $arguments); 易于阅读

Argument unpacking

现在我只为第二个变体找到了专业人士-根据文档中的某个家伙,它甚至更快。这有什么弊端吗?

php function-call
1个回答
0
投票

请注意,他们实际上在做不同的事情:

参数解压缩就是,要解压缩函数要使用的参数。

call_user_func_array正在调用一个函数,并提供一个要解压缩的数组作为该函数的参数。

在您的情况下,因为您的代码本质上是在做相同的事情,所以不会有太大区别,但是通常,只有在您想通过它调用函数时,才使用call_user_func_array,您不会仅仅使用它来解压缩参数(除非您使用的PHP低于5.6)。

TLDR:尽管call_user_func_array进行了参数拆包,但这不是主要思想,主要思想是调用一个函数(并为其提供参数)。

通常情况下,您不应该调用这样的函数,除非您有非常特殊的情况,否则它表示代码库存在严重错误。

© www.soinside.com 2019 - 2024. All rights reserved.