我想在一个类中实现一个方法,如下所示:
class Query {
public function orderBy($dir="asc", ...$fields){}
}其中$dir是默认参数,$field是使用(...)标记的可变长度参数。
问题是可变长度参数必须在最后声明,当我这样做时,开发人员不能跳过第一个参数作为默认值。我该如何解决这个问题呢?
请注意,我不想使用func_get_args(),因为我希望开发人员有一些类型提示。
发布于 2019-03-30 17:41:12
这根本是不可行的。PHP不支持这一点,而且它也没有太大的意义。唯一可行的方法是使用命名参数,就像在其他一些语言中一样,使参数顺序变得无关紧要。
此外,您在那里使用可变参数的要求是人为的,并且不是很有用。只需使用一个数组和一个可选的order参数。
例如:
function orderBy(array $columns, string $order = 'asc') {
// do your thing
}对于方法用户来说,更整洁,更容易理解,并且符合语言语法。
如果你想让它看起来与一个可变函数“相似”,只需使用如下语法调用该方法:
orderBy(["column1", "column5"]);
orderBy(["column2"], 'desc');发布于 2019-10-06 03:10:55
我想做的是:
function tableHead($id=NULL, $class=NULL, ...$columnsHeads)当我不需要前两个参数时,“逻辑”函数调用是:
tableHead( , , "Dogs","Cars","Sausages");遗憾的是,PHP不允许使用,作为空默认值。我通过将NULL, NULL,作为前两个参数来解决这个问题。不是很理想,但现在就可以了!
(我确信我在20年前的某种语言中使用过空,来发送空值--有人知道吗?--或者这只是一种痴心妄想?)
我的解决方案(哈哈)是:
tableHead(NULL, NULL, "dogs","cars", "sausages");不是很理想,但它是有效的。在正常使用中,将使用变量指定的id和class来调用函数。就我个人而言,我不认为组合可变参数和可选参数有什么不好的地方……但是你确实要小心一点!
https://stackoverflow.com/questions/55420634
复制相似问题