首先呢这个函数出现的是比较早的,大致应该是PHP4出现的,
func_get_args — 返回一个包含函数参数列表的数组
说明 ¶
func_get_args(): array
获取函数参数列表的数组。
该函数可以配合 func_get_arg() 和 func_num_args() 一起使用,从而使得用户自定义函数可以接受自定义个数的参数列表。
参数 ¶
此函数没有参数。
返回值 ¶
返回一个数组,其中每个元素都是目前用户自定义函数的参数列表的相应元素的副本。
错误/异常 ¶
在用户自定义函数外调用则会出现错误警告。
上面是官方给出的定义和解释:其中还有一段是PHP8采用这个函数需要注意的
注意:
As of PHP 8.0.0, the func_*() family of functions is intended to be mostly transparent with regard to named arguments, by treating the arguments as if they were all passed positionally, and missing arguments are replaced with their defaults. This function ignores the collection of unknown named variadic arguments. Unknown named arguments which are collected can only be accessed through the variadic parameter.
也就是说这个func_家族的函数,不会接受一些变长参数的内容,我举个例子你就会很明白了:
______________________________________________________________________________________________
我在这个例子中又使用了命名参数,我们来看结果:
1-我传递值的顺序是value2,value1,根据运行结果来看:func_get_args()是不区分位置参数和命名参数的,所以这反过来说它又是比较灵活的.
2-不能输出value3,value4 说明func_get_args()不能接收变长参数的集合的
它的使用场景:适用于处理不定数量的参数,无需知道参数的具体数量或类型。这个函数在PHP 5.6版本之前,它是用于获取函数内部所有传递给函数的参数的主要手段,因为当时还没有引入变长参数,命名参数等这样更为灵活和直观的语法。
当然使用 func_get_args()
函数获取参数的方式通常用于处理不定数量的参数或者在函数签名中不明确指定参数的情况。当然现在更推荐用变长参数的方式去这种情况, 但是在已知参数数量且参数有明确的含义的情况下,直接在函数签名中声明参数是更为推荐的做法。这样的声明方式更直观,有助于代码的理解和维护。
顺便说一下,比如PHP中的var_dump(),printf()我们经常是不是用到的就是这种函数,他们都接受一个变长参数,
function var_dump(mixed $value, mixed ...$values): void {}
//来自PHP标准_2
function printf(string $format, mixed ...$values): int {}
//来自PHP标准_2