func_get_args() 是 PHP 中用于在函数体内获取所有实际传入参数的内置函数,返回索引从 0 开始的参数值数组;仅限函数内部调用,不包含未传值的默认参数,常与 func_num_args() 和 func_get_arg() 配合使用。

func_get_args 是 PHP 中用于在函数内部获取所有传入参数的内置函数,它返回一个包含所有实际传递给该函数的参数值的数组(索引从 0 开始)。
基本用法和注意事项
它只能在函数体内调用,不能在类方法外部、全局作用域或匿名函数(除非是传统 function 定义的闭包)中直接使用。调用后返回的是当前函数被调用时传入的所有参数副本,不包括未传值的默认参数,也不受参数是否声明影响。
- 如果函数定义了参数但调用时没传,func_get_args() 不会包含它们(即只反映“实际传入”的参数)
- 它与 func_num_args() 配合使用可获知参数个数
- 它不能替代可变参数语法(PHP 5.6+ 的
...),但兼容性更好(支持 PHP 4+)
简单示例:获取并处理全部参数
比如写一个兼容任意数量数字求和的函数:
function sum() {$args = func_get_args();
return array_sum($args);
}
echo sum(1, 2, 3); // 输出 6
echo sum(10, 20, 30, 40); // 输出 100
配合 func_get_arg 和 func_num_args 使用
除了获取全部参数数组,还可以用:
立即学习“PHP免费学习笔记(深入)”;
- func_num_args() 获取参数总数(整型)
- func_get_arg($index) 获取指定位置的单个参数(类似 $args[$index],但更轻量)
例如判断是否至少传了两个参数再操作:
function log_info() {if (func_num_args() throw new InvalidArgumentException('至少需要 2 个参数');
}
$level = func_get_arg(0);
$message = func_get_arg(1);
error_log("[$level] $message");
}
注意与可变参数(...$args)的区别
PHP 5.6+ 推荐优先使用现代语法 function foo(...$args),因为:
- 语义更清晰,IDE 和静态分析工具能更好识别
- 支持类型声明(如
function bar(string ...$names)) - 无需在函数内调用额外函数即可拿到数组
- func_get_args() 在启用了 opcache 或某些严格模式下可能被优化掉(极少见,但存在风险)



















