在PHP中,有unset()
等函数支持我们抛出的任意数量的参数。
我想创建一个类似的函数,它能够接受任意数量的参数并对其进行处理。
任何想法,怎么做?
答案 0 :(得分:25)
在PHP中,使用函数func_get_args
来获取所有传递的参数。
<?php
function myfunc(){
$args = func_get_args();
foreach ($args as $arg)
echo $arg."/n";
}
myfunc('hello', 'world', '.');
?>
另一种方法是将一组变量传递给您的函数,这样您就不必使用$arg[2];
之类的东西,而是可以使用$args['myvar'];
或重新记录传递的内容。它也是无限可扩展的,这意味着您可以在以后添加新变量,而无需更改已编码的内容。
<?php
function myfunc($args){
while(list($var, $value)=each($args))
echo $var.' '.$value."/n";
}
myfunc(array('first'=>'hello', 'second'=>'world', '.'));
?>
答案 1 :(得分:11)
您可以在功能范围内使用这些功能:
一些例子:
foreach (func_get_args() as $arg)
{
// ...
}
for ($i = 0, $total = func_num_args(); $i < $total; $i++)
{
$arg = func_get_arg($i);
}
答案 2 :(得分:4)
您可以使用3种功能来处理此问题。有如下函数声明:
function foo()
{
/* Code here */
}
<强> func_num_args() 强> 它返回已传递给数组的参数数量
<强> func_get_arg($index) 强> 它返回指定索引处的参数值
<强> func_get_args() 强> 返回提供的参数数组。
答案 3 :(得分:3)
您可以在函数内使用func_get_args()来解析任意数量的传递参数。
答案 4 :(得分:2)
答案 5 :(得分:1)
如果您使用的是PHP 5.6或更高版本,则参数列表可能包含 ...
标记,以表示该函数接受可变数量的参数。参数将作为数组传递给给定变量;只需使用 ...
即可访问无限量变量参数。
例如:
<?php
function sum(...$numbers) {
$sum = 0;
foreach ($numbers as $n) {
$sum += $n;
}
return $sum ;
}
echo sum(1, 2, 3, 4, 5);
?>
如果您使用 PHP版本&lt; = 5.5 ,则可以使用func_num_args(),func_get_arg()和func_get_args()函数访问无限制参数。
答案 6 :(得分:1)
php7通过在函数定义中的参数名称之前使用省略号,为函数提供了一种简单的passing and catching unlimited parameters
方法。以下是一个展示相同的例子:
<?php
function print_names(...$names){
foreach($names AS $name) echo "The name is: <b>$name</b>.\n";
}
print_names(
"Superman",
"Ironman",
"Spiderman",
"HULK",
"Thor",
"Captain America",
"Batman"
);
致谢:http://dwellupper.io/post/5/passing-unlimited-parameters-to-functions-in-php7