PHP 函数可以接受无限数量的参数吗? [复制]

Posted

技术标签:

【中文标题】PHP 函数可以接受无限数量的参数吗? [复制]【英文标题】:Can a PHP function accept an unlimited number of parameters? [duplicate] 【发布时间】:2011-03-05 22:35:23 【问题描述】:

php 中有像 unset() 这样的函数,它支持我们向它们抛出的任意数量的参数。

我想创建一个类似的函数,它能够接受任意数量的参数并全部处理。

任何想法,如何做到这一点?

【问题讨论】:

如果您将来打算对此事进行更多研究,您要查找的术语是variadic function。链接的 Wikipedia 文章甚至包含一个 PHP 示例。 如果您认为函数将来有可能发生变化,您可能希望将字符串变量与parse_str 一起使用。 【参考方案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

【讨论】:

给出的参考不正确。这是在 PHP 5.6 php.net/manual/en/… 中首次引入的【参考方案2】:

如果您使用的是 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 版本 ,那么您可以使用 func_num_args()、func_get_arg() 和 func_get_args() 函数访问无限参数。

【讨论】:

【参考方案3】:

如果你有 PHP 5.6+,那么你可以使用

function sum(...$numbers) 

functions.variable-arg-list

【讨论】:

【参考方案4】:

在 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', '.'));
?>

【讨论】:

【参考方案5】:

您可以使用 3 个函数来使用它。有这样的函数声明:

function foo()

    /* Code here */

可以使用的功能如下

func_num_args() 它返回已传递给数组的参数数量

func_get_arg($index) 它返回指定索引处的参数值

func_get_args() 它返回提供的参数数组。

【讨论】:

【参考方案6】:

您可以在您的函数范围内使用这些函数:

func_get_arg() func_get_args() func_num_args()

一些例子:

foreach (func_get_args() as $arg)

    // ...


for ($i = 0, $total = func_num_args(); $i < $total; $i++)

    $arg = func_get_arg($i);

【讨论】:

【参考方案7】:

您可以在函数中使用func_get_args() 来解析任意数量的传递参数。

【讨论】:

以上是关于PHP 函数可以接受无限数量的参数吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何编写接受无限参数的函数?

你能写一个可以接受任意数量参数的 c# 装饰器函数吗?

如何在php中通过引用传递无限参数[重复]

具有无限参数的 Java 方法

JavaScript 函数中的无限参数

如何在函数中使用无限参数(如 PHP isset())[重复]