如何使用可选参数和可变长度参数编写函数?

问题描述 投票:2回答:1

我想在类中实现一个方法,如下所示:

class Query {
    public function orderBy($dir="asc", ...$fields){}
}

其中$dir是默认参数,$field是使用(...)标记的可变长度参数。

问题是必须在结尾声明变长参数,当我这样做时,开发人员不能跳过第一个参数为其默认值。我怎样才能解决这个问题?

请注意,我不想使用func_get_args(),因为我希望开发人员有一些类型提示。

php function variadic-functions default-arguments
1个回答
1
投票

这根本不可行。 PHP不支持这一点,它没有多大意义。唯一可行的方法是使用命名参数,就像在其他一些语言中一样,使参数顺序无关紧要。

此外,您使用可变参数的要求是人为的,并不是非常有用。只需使用数组和可选的order参数。

例如:

function orderBy(array $columns, string $order = 'asc') {
    // do your thing
}

更简洁,方法用户更容易理解,并且符合语言语法。

如果您希望它看起来与可变参数函数“相似”,只需使用如下语法调用该方法:

orderBy(["column1", "column5"]);

orderBy(["column2"], 'desc');
© www.soinside.com 2019 - 2024. All rights reserved.