在Python和其他方面,变量长度参数列表有特殊的语法:
def do_something(*args):
# do something
do_something(1, 2, 3, 4, 5, ...) # arbitrarily long list我正在阅读PHP手册,它说:
PHP 4及以上版本支持用户定义函数中的可变长度参数列表.使用func_num_args()、func_get_arg()和func_get_args()函数非常容易。 不需要特殊的语法,参数列表仍然可以显式地提供函数定义,并且行为正常。
我知道第一部分了。您可以将任意多的参数传递给不带参数的函数,然后使用func_get_args()等将它们作为数组来获取。不过,我不太明白第二部分的意思。
所以,我的问题是,对于可变长度的参数,是否有一些特殊的语法,或者一些我不知道的最佳实践?手册中所建议的方法充其量似乎是一种传统的方法,它使您的函数看起来不需要任何参数(除非我做错了)。难道我根本不想使用这个语言特性吗?
发布于 2011-01-02 15:18:00
与Python的*运算符或C#的params关键字不同,在PHP中,您甚至不必指定可变长度的参数。第二部分开始时,“不需要特殊语法。”
至于第二段的其余部分:如果您想在变量长度参数之前指定任何必需的或不相关的参数,请在您的函数签名中指定它们,以便您的函数能够处理这些参数。然后,要获取变量长度参数,从func_get_args()中删除所需的变量,如下所示:
function func($required) {
// Contains all arguments that come after $required
// as they were present at call time
$args = array_slice(func_get_args(), 1);
}您不必这样做(您仍然可以从func_get_args()切片并相应地使用其不同的元素),但它确实使代码更自文档化。
发布于 2011-01-02 15:36:19
下面是一个更现实的例子:
function Average()
{
$result = 0;
$arguments = func_get_args();
foreach ($arguments as $argument)
{
$result += $argument;
}
return ($result / max(1, func_num_args()));
}
Average(1, 2, 3, 4, 5); // 3这叫做变分函数。
发布于 2015-12-10 15:34:39
由于PHP5.6,可以使用...运算符指定变量参数列表。
function do_something($first, ...$all_the_others)
{
var_dump($first);
var_dump($all_the_others);
}
do_something('this goes in first', 2, 3, 4, 5);
#> string(18) "this goes in first"
#>
#> array(4) {
#> [0]=>
#> int(2)
#> [1]=>
#> int(3)
#> [2]=>
#> int(4)
#> [3]=>
#> int(5)
#> }如您所见,...操作符收集数组中参数的变量列表。
如果需要将变量参数传递给另一个函数,...仍然可以帮助您。
function do_something($first, ...$all_the_others)
{
do_something_else($first, ...$all_the_others);
// Which is translated to:
// do_something_else('this goes in first', 2, 3, 4, 5);
}由于PHP7,参数的变量列表也可以强制为所有相同类型的。
function do_something($first, int ...$all_the_others) { /**/ }https://stackoverflow.com/questions/4578975
复制相似问题