在PHP中传递数组作为参数,而不是数组

我似乎记得,在PHP中有一种方法来传递一个数组作为参数列表的函数,将数组解引用到标准的func($arg1, $arg2)方式。 但现在我迷失在如何做到这一点。 我记得通过引用传递的方式,如何“传入”传入的参数…但不是如何将数组列表中的参数列表。

它可能就像func(&$myArgs)一样简单,但是我确定不是这样。 但是,可悲的是,php.net手册至今没有透露任何信息。 不是我在过去的一年中不得不使用这个特殊的function。

还要注意,如果你想将一个实例方法应用到一个数组中,你需要传递这个函数:

 call_user_func_array(array($instance, "MethodName"), $myArgs); 

如前所述 ,从PHP 5.6开始,您还可以使用...标记(也称为“splat运算符”)作为可变参数函数function的一部分( 有关详细信息,请参阅此处 )

 <?php $array = ['Hello', 'World']; function variadic( $arg1, $arg2 ) { // Do stuff echo $arg1 . ' ' . $arg2; } // Splat $array in function call variadic( ...$array ); // Will echo 'Hello World' 

注意:数组项通过它们在数组中的位置映射到参数,而不是它们的键。

编辑

根据CarlosCarucce的评论,在所有情况下, 解包(如上所示)是最快的方法 。 在某些情况下,它比call_user_func_array快5倍。

为了完整起见,从PHP 5.1开始,它也起作用:

 <?php function title($title, $name) { return sprintf("%s. %s\r\n", $title, $name); } $function = new ReflectionFunction('title'); $myArray = array('Dr', 'Phil'); echo $function->invokeArgs($myArray); // prints "Dr. Phil" ?> 

请参阅: http : //php.net/reflectionfunction.invokeargs

对于使用ReflectionMethod :: invokeArgs的方法,可以将对象作为第一个parameter passing。