PHP - 变量参数



在 PHP 中,可以编写一个能够接受具有可变元素数量的参数列表的函数。要声明变量参数列表,参数名称前面加上 “...”(三个点)符号。传递的值将收集到具有参数名称的数组中。


function myfunction(...$arg) {
   Statement1;
   Statement2;
}

要调用此类函数,请在括号中放入任意数量的逗号分隔值。


 myfunction(v1, v2, v3, . . . , vn);

函数中声明的形参是传递的所有值的数组。我们使用任何适当的 built_in 数组函数来执行该过程。

在下面的示例中,用户定义的函数 myfunction() 能够接收可变数量的值并找到它们的平均值。


<?php  
   function  myfunction(...$numbers) {
      $avg = array_sum($numbers)/count($numbers);
      return $avg;
   }
   $avg = myfunction(5, 12, 9, 23, 8);
   echo "average = $avg";
?>

它将产生以下输出 -

average = 11.4

尝试更改传递的数组的大小,然后再次运行该程序。

您可以使用 foreach 循环遍历函数内的数组。该函数可以在可变长度参数之前具有任何位置参数。从接收到的值中,将首先填充位置参数,将其他参数复制到数组中。


<?php
   function myfunction($x, ...$numbers) {
      echo "First number: $x" . PHP_EOL;
      echo "Remaining numbers: ";
      foreach ($numbers as $n) {
         echo "$n  ";
      }
   }
   myfunction(5, 12, 9, 23, 8, 41);
?>

它将产生以下输出 -

First number: 5
Remaining numbers: 12  9  23  8  41

可变参数函数

可以处理函数的可变数量的参数,即使没有 “...”语法。PHP 有 built_in 函数,如 func_num_args()func_get_arg() func_get_args(),它们可以用于类似的结果。

  • func_num_args():  返回传递给函数的参数数。
  • func_get_arg():  从参数列表中返回一个项目
  • func_get_args():  返回一个包含函数的参数列表的数组

上面的变量参数示例可以使用这些函数重写,如下所示 -


<?php
   function myfunction() {
      $sum = 0;
      foreach (func_get_args() as $n) {
         $sum += $n;
      }
      return $sum;
   }
   echo myfunction(5, 12, 9, 23, 8, 41);
?>

它将产生以下输出 -

98

此程序打印传递给函数的所有数字 -


<?php
   function myfunction() {
      $len = func_num_args();
      echo "Numbers : ";
      $i=0;
      for ($i=0; $i<$len; $i++)
      echo func_get_arg($i) . " ";
   }
   myfunction(5, 12, 9, 23, 8, 41);
?>

它将产生以下输出 -

Numbers : 5 12 9 23 8 41