PHP - 可變引數



在 PHP 中,可以編寫一個函式,該函式能夠接受元素數量可變的引數列表。要宣告可變引數列表,引數名稱前要加上 "..."(三個點)符號。傳遞的值將收集到一個以引數名稱命名的陣列中。

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

要呼叫此類函式,請在括號中放入任意數量用逗號分隔的值。

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

在函式中宣告的形式引數是一個包含所有傳遞值的陣列。我們可以使用任何合適的內建陣列函式來執行該過程。

示例

在以下示例中,使用者定義函式 **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 具有內建函式,如 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
廣告