我发现了两个如何在以$function
为数组提供的$instance
上动态调用$arguments
的解决方案。
带有call_user_func_array
的版本
call_user_func_array
使用三点符号$result = call_user_func_array(array($instance, $function), $arguments);
易于阅读
Argument unpacking
现在我只为第二个变体找到了专业人士-根据文档中的某个家伙,它甚至更快。这有什么弊端吗?
请注意,他们实际上在做不同的事情:
参数解压缩就是,要解压缩函数要使用的参数。
call_user_func_array正在调用一个函数,并提供一个要解压缩的数组作为该函数的参数。
在您的情况下,因为您的代码本质上是在做相同的事情,所以不会有太大区别,但是通常,只有在您想通过它调用函数时,才使用call_user_func_array,您不会仅仅使用它来解压缩参数(除非您使用的PHP低于5.6)。
TLDR:尽管call_user_func_array进行了参数拆包,但这不是主要思想,主要思想是调用一个函数(并为其提供参数)。
通常情况下,您不应该调用这样的函数,除非您有非常特殊的情况,否则它表示代码库存在严重错误。