func_num_args

(PHP 4, PHP 5, PHP 7, PHP 8)

func_num_args返回传递给函数的参数数量

描述

func_num_args(): int

获取传递给函数的参数数量。

此函数可与 func_get_arg()func_get_args() 结合使用,以允许用户定义的函数接受可变长度参数列表。

参数

此函数没有参数。

返回值

返回传递给当前用户定义函数的参数数量。

错误/异常

如果从用户定义函数外部调用,则会生成警告。

示例

示例 #1 func_num_args() 示例

<?php
function foo()
{
echo
"参数数量: ", func_num_args(), PHP_EOL;
}

foo(1, 2, 3);
?>

上面的示例将输出

Number of arguments: 3

注释

注意:

从 PHP 8.0.0 开始,func_*() 函数系列旨在对命名参数基本上保持透明,将参数视为全部按位置传递,缺少的参数将被其默认值替换。此函数忽略对未知命名可变参数的收集。只能通过可变参数访问收集的未知命名参数。

参见

添加注释

用户贡献的注释 7 个注释

39
jared at ws-db dot com
18 年前
只是给任何想知道的人的一点说明。此函数不包括具有默认值的 params,除非您传入一个来覆盖默认的 param 值。不确定这是否说得通,所以这里是一个例子

<?php
function helloWorld($ArgA, $ArgB="HelloWorld!") {
return
func_num_args();
}

// 以下将返回 1
$Returns1 = helloWorld("HelloWorld!");

// 以下将返回 2
$Returns2 = helloWorld("HelloWorld!", "HowdyWorld!");
?>
9
Dennis Robinson from basnetworks dot net
15 年前
此函数非常有用,我相信是唯一的解决方案,当您有一个可以接受任何类型数据的可选参数时。

例如

<?php

// $data 可以是任何类型,包括 null
function my_function($name, $data = null)
{
if (
$data !== null)
{
// 对 $data 执行某些操作
// 如果您调用 my_function('something'),这将不会被执行
// 如果您调用 my_function('something', null),这将不会被执行
}
}

?>

上面函数的问题是,您将永远无法使用 null 作为 $data 的值。要解决此问题,请使用 func_num_args(),如下所示

<?php

// $data 可以是任何类型,包括 null
function my_function($name, $data = null)
{
if (
func_num_args() >= 2)
{
// 对 $data 执行某些操作
// 如果您调用 my_function('something'),这将不会被执行
// 如果您调用 my_function('something', null),这将被执行
}
}

?>

此解决方案有效,因为 func_num_args() 报告调用函数时传递了多少个参数。它不考虑使用默认参数值的情况。
1
tongcheong77 at gmail dot com
7 年前
如果您使用的是 PHP 7 并且 func_num_args 在您扩展的基类中,您可以使用 'spat' 运算符传递参数。

class Sql {

public function doGetWhere(...$args) {

$num_args = func_num_args();
$args_list = func_get_args();

echo '<pre>';
var_dump($args_list);
echo '<pre>';
}
}

class Member extends Sql {

public function getWhere(...$args) {

$this->doGetWhere(...$args);

}
}

$member = new Member();
$member->getWhere('first_name','last_name','userlevel','email','where','email','=',$sub_email);

但是,请注意,如果您在上面的 'Member' 类中 'new up' 了 'Sql' 类,而不是扩展它,则不需要将参数作为变量传递。只是我的一点想法。-Bruce tong
3
luisguillermo dot quevedovelez at gmail dot com
12 年前
我定义了一个函数 function_name(){ ...} 作为 Drupal 回调。
我试图获取传递了多少个参数

我得到一个错误,我的网站崩溃了

我用 func_get_args() 替换了 func_num_args(),我的网站恢复了。

我得出结论,您不能在回调中使用 func_num_args()。

希望有帮助。
2
thalis at NOSPAMcs dot pitt dot edu
22 年前
func_get_args() 的目的是构建具有可变数量参数的函数,例如

<?php
function var_param_func(){
if(
func_num_args()==0){
// 执行某事
}
if(
func_num_args()==1)
// 执行另一件事
// 使用 func_get_args() 获取参数
}
}
?>
0
ashley at dcs dot warwick dot ac dot uk
22 年前
如果您想将参数完整地传递给另一个函数,请使用 func_get_args 和 call_user_func_array(小心 - 此函数仅在最新的 PHP 版本中可用)。例如

<?php
/* 打印一个 HTML 标签。它接受可变数量的参数:
第一个参数应该是标签名称,之后是成对的
参数,描述键和值。值将用
双引号括起来打印。 */
function printTag() {
$numArgs = func_num_args();
if (
$numArgs < 1) die("printTag 没有给出任何参数");

echo
"<" . func_get_arg(0);
for (
$i = 1; $i < $numArgs; $i+=2) {
echo
" " . func_get_arg($i);
if (
$i+1 < $numArgs)
echo
"=\"" . func_get_arg($i+1) . "\"";
}
echo
">";

}

/* 打印一个 HTML 标签,末尾带有换行符 */
function printTagNL() {
$args = func_get_args();
call_user_func_array("printTag", $args);
echo
"\n";
}

printTagNL("input", "type", "hidden", "name", "SORTORDER", "value", $columnNo);
?>
-9
andy at arakka dot co dot th
19 年前
func_num_args() 也可以与命名参数一起使用。例如

<?php
function DebugShow( $label, $value ) {
echo
"# " . $label ;
if (
func_num_args() > 1 ) echo " = " . $value ;
echo
"<br>";
}
?>
To Top