我想在类中实现一个方法,如下所示:
class Query {
public function orderBy($dir="asc", ...$fields){}
}
其中$dir
是默认参数,$field
是使用(...
)标记的可变长度参数。
问题是必须在结尾声明变长参数,当我这样做时,开发人员不能跳过第一个参数为其默认值。我怎样才能解决这个问题?
请注意,我不想使用func_get_args()
,因为我希望开发人员有一些类型提示。
这根本不可行。 PHP不支持这一点,它没有多大意义。唯一可行的方法是使用命名参数,就像在其他一些语言中一样,使参数顺序无关紧要。
此外,您使用可变参数的要求是人为的,并不是非常有用。只需使用数组和可选的order参数。
例如:
function orderBy(array $columns, string $order = 'asc') {
// do your thing
}
更简洁,方法用户更容易理解,并且符合语言语法。
如果您希望它看起来与可变参数函数“相似”,只需使用如下语法调用该方法:
orderBy(["column1", "column5"]);
orderBy(["column2"], 'desc');