<?php
function variadic($arg1, $arg2)
{
// Do stuff
echo $arg1.' '.$arg2;
}
$array = ['Hello', 'World'];
// 'Splat' the $array in the function call
variadic(...$array);
// 'Hello World'
<?php
// Define the function...
function variadic($var, SomeClass ...$items)
{
// $items will be an array of objects of type `SomeClass`
}
// Then you can call...
variadic('Hello', new SomeClass, new SomeClass);
// or even splat both ways
$items = [
new SomeClass,
new SomeClass,
];
variadic('Hello', ...$items);
4条答案
按热度按时间cbeh67ev1#
注意:此解决方案已过时,请参考simonhamp的回答以获取更新信息。
http://www.php.net/manual/en/function.call-user-func-array.php
dsf9zpds2#
如前所述,从PHP 5.6+开始,您可以(应该!)使用
...
标记(又名“splat运算符”,可变参数函数功能的一部分)轻松调用具有参数数组的函数:根据CarlosCarucce的评论,这种形式的参数解包是迄今为止所有情况下最快的方法。在某些比较中,它比
call_user_func_array
快5倍以上。旁边
因为我认为这真的很有用(尽管与问题没有直接关系):你可以在函数定义中对splat操作符参数进行类型提示,以确保所有传递的值都与特定类型匹配。
(Just记住,这样做它必须是你定义的 * 最后一个 * 参数,并且它将传递给函数的所有参数捆绑到数组中。
这对于确保数组包含特定类型的项非常有用:
qnzebej03#
另外要注意的是,如果你想将一个示例方法应用于一个数组,你需要将函数传递为:
r7xajy2e4#
为了完整起见,从PHP 5.1开始,这也可以工作:
参见:http://php.net/reflectionfunction.invokeargs
对于方法,您使用ReflectionMethod::invokeArgs,并将对象作为第一个参数传递。