« 46. 自訂函數的參數預設值 | (回到Blog入口) | 48. 如何自訂 class? »

47. 如何設計可變長度參數的函數?

jollen 發表於 October 27, 2006 3:57 PM

PHP 4 新支援了可變長度的參數用法 (Variable-length argument lists),我們直接以一個範例來說明:

<?php
function foo() { $numargs = func_num_args(); return $numargs; }
$n = foo (10, 15, 20); //傳入 3 個參數 echo $n; //輸出 3
?>

程式裡的 func_num_args() 函數傳回呼叫該函數時所傳入的參數個數,以範例中的 foo(10, 15, 20) 為例,傳入了 3 個參數給 foo() 函數,因此 $numargs 的值為 3。此時 function foo() 不需要加上參數列表 (parameter lists)。

要取得傳入的參數,則是使用 func_get_arg() 函數。請看底下的範例:

<?php function foo() { $numargs = func_num_args(); if ($numargs > 2) { echo "First: ". func_get_arg(0). "
\n"; echo "Second: ". func_get_arg(1). "
\n"; echo "Third: ". func_get_arg(2). "
\n"; } return $numargs; }
$n = foo (10, 15, 20); //傳入 3 個參數 echo $n; ?>

執行後的輸出結果為:

First: 10 Second: 15 Third: 20 3

要注意的是,參數的個數是由 0 算起,因此 func_get_arg(0) 會傳回第 1 個參數。如果指定給 func_get_arg() 的參數個數超過實際傳入的參數範圍,則 func_get_arg() 會傳回 FALSE。

另外,還有一個 func_get_args() 函數會傳回參數的陣列,因此我們可以配合 foreach 敘述來取得參數的值。請看底下的範例:

<?php function foo() { foreach(func_get_args() as $value) { echo "$value
\n"; } } foo (10, 15, 20); //傳入 3 個參數 ?>

輸出結果如下:

10 15 20

--jollen

版權聲明

請參閱頁面底部的 CC 授權條款。此外,Jollen's PHP 專欄禁止引用、修改與轉貼,如果您想與朋友分享的話,我們只允許網站連結(hyperlink)的形式。

評論 (1)

<B><PRE>
<?php

function foo() {
$numargs = func_num_args();

$sum = 0;
for ($i = 0; $i
</PRE></b>

發表一個評論

(如果你此前從未在此 Blog 上發表過評論,則你的評論必須在 Blog 主人驗證後才能顯示,請你耐心等候。)

| Top | Jollen's Forum |
Jollen's PHP 專欄採用 Attribution-NonCommercial-NoDerivs 2.5 授權條款
Copyright(c) 2001-2007,2010 www.jollen.org