首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP func_get_args、func_get_arg、func_num_args 差異詳解

     編輯:PHP 綜合知識

PHP 可變參數函數的三大工具函數

當函數定義不指定參數個數時,可在函數內部使用這三個函數動態存取實際傳入的參數。

函數對照表

函數回傳值用途
func_get_args()陣列取得所有參數組成的陣列
func_get_arg($index)混合型別取得指定索引的參數值
func_num_args()整數取得參數總個數

實際範例

<?php
function demo() {
    echo 'func_get_args(): ';
    print_r(func_get_args());
    echo '<br>func_get_arg(1): ' . func_get_arg(1);
    echo '<br>func_num_args(): ' . func_num_args();
}

demo('www', 'jb51', 'net');
/*
輸出結果:
func_get_args(): Array ( [0] => www [1] => jb51 [2] => net )
func_get_arg(1): jb51
func_num_args(): 3
*/
?>

常見應用場景

  • 建立通用日誌函數:log($level, $message, ...$context)
  • 實作類似 printf 的格式化函數
  • 框架路由/控制器動態參數綁定
  • 向後相容舊版 API:新增可選參數不影響既有呼叫端

進階範例:模擬多型建構子

class Product {
    public function __construct() {
        $args = func_get_args();
        $count = func_num_args();
        
        if ($count === 1 && is_array($args[0])) {
            // 陣列初始化
            $this->loadFromArray($args[0]);
        } elseif ($count === 3) {
            // 獨立參數初始化
            list($this->id, $this->name, $this->price) = $args;
        } else {
            throw new InvalidArgumentException('參數錯誤');
        }
    }
}

注意事項

  • 只能在函數內部使用,不可用於函數外部或類別方法外部。
  • PHP 5.6+ 建議改用 ... 可變參數語法(function(...$args)),語意更清晰且支援型別提示。
  • func_get_arg() 索引超出範圍會產生警告並回傳 NULL。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved