首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编写带有可选参数和可变长度参数的函数?

如何编写带有可选参数和可变长度参数的函数?
EN

Stack Overflow用户
提问于 2019-03-29 23:22:42
回答 2查看 84关注 0票数 3

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

代码语言:javascript
复制
class Query {
    public function orderBy($dir="asc", ...$fields){}
}

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

问题是可变长度参数必须在最后声明,当我这样做时,开发人员不能跳过第一个参数作为默认值。我该如何解决这个问题呢?

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

EN

回答 2

Stack Overflow用户

发布于 2019-03-30 17:41:12

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

此外,您在那里使用可变参数的要求是人为的,并且不是很有用。只需使用一个数组和一个可选的order参数。

例如:

代码语言:javascript
复制
function orderBy(array $columns, string $order = 'asc') {
    // do your thing
}

对于方法用户来说,更整洁,更容易理解,并且符合语言语法。

如果你想让它看起来与一个可变函数“相似”,只需使用如下语法调用该方法:

代码语言:javascript
复制
orderBy(["column1", "column5"]);

orderBy(["column2"], 'desc');
票数 1
EN

Stack Overflow用户

发布于 2019-10-06 03:10:55

我想做的是:

代码语言:javascript
复制
function tableHead($id=NULL, $class=NULL, ...$columnsHeads)

当我不需要前两个参数时,“逻辑”函数调用是:

代码语言:javascript
复制
tableHead( , , "Dogs","Cars","Sausages");

遗憾的是,PHP不允许使用,作为空默认值。我通过将NULL, NULL,作为前两个参数来解决这个问题。不是很理想,但现在就可以了!

(我确信我在20年前的某种语言中使用过空,来发送空值--有人知道吗?--或者这只是一种痴心妄想?)

我的解决方案(哈哈)是:

代码语言:javascript
复制
tableHead(NULL, NULL, "dogs","cars", "sausages");

不是很理想,但它是有效的。在正常使用中,将使用变量指定的idclass来调用函数。就我个人而言,我不认为组合可变参数和可选参数有什么不好的地方……但是你确实要小心一点!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55420634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档