PHP函数-忽略一些默认参数

PHP函数-忽略一些默认参数,php,function,parameters,Php,Function,Parameters,可能重复: 只是随机发现的 如果我有这样一个函数: public function getSomething($orderBy='x', $direction = 'DESC', $limit=null){ //do something random } 调用函数时,可以忽略前两个字段并保留默认值,但可以指定第三个字段 例如: $random = $this->my_model->getSomething(USE_DEFAULT, USE_DEFAULT, 10); 我知道

可能重复:

只是随机发现的

如果我有这样一个函数:

public function getSomething($orderBy='x', $direction = 'DESC', $limit=null){

//do something random

}
调用函数时,可以忽略前两个字段并保留默认值,但可以指定第三个字段

例如:

$random = $this->my_model->getSomething(USE_DEFAULT, USE_DEFAULT, 10);
我知道我可以传递第一个和第二个参数,但我要问的是它们是否是某种特殊的关键字,只是说使用默认值

希望这是有道理的。这不是问题,只是好奇而已


感谢阅读

您不能忽略参数。但你可以这样做:

public function getSomething($limit=null){

return $this->getSomething('x','DESC',$limit);

}


public function getSomething($orderBy='x', $direction = 'DESC', $limit=null){

...

}

再见

你需要自己去做。您可以使用
null
指示应使用默认值:

public function getSomething($orderBy = null, $direction = null, $limit = null) {
    // fallbacks
    if ($orderBy === null) $orderBy = 'x';
    if ($direction === null) $direction = 'DESC';

    // do something random
}
然后在调用它时传递
null
,以指示要使用默认值:

$random = $this->my_model->getSomething(null, null, 10);

我有时使用的另一种可能的解决方案是在参数列表的最后添加一个参数,包含所有可选参数:

public function foo($options = array()) {
    // merge with defaults
    $options = array_merge(array(
        'orderBy'   => 'x',
        'direction' => 'DESC',
        'limit'     => null
    ), $options);

    // do stuff
}
这样,您就不需要指定所有可选参数。确保您始终处理一整套选项。您可以这样使用它:

$random = $this->my_model->foo(array('limit' => 10));
在这种特殊情况下,似乎没有必需的参数,但如果需要,只需将其添加到可选参数之前:

public function foo($someRequiredParameter, $someOtherRequiredParameter, $options = array()) {
    // ...
}

我认为PHP做不到这一点。我所知道的最佳解决方案概述如下:

老实说,当函数尝试执行太多操作时,这就成了一个问题。当你看到一个函数增长到几个以上的参数时,几乎总会有更好的设计模式(通常是穷人继承了旧代码,附加参数是“完成任务”的最快方式)

根据您的问题,难以捉摸的答案是最好的,但请看圈复杂度:


这是一个很好的方法,可以知道您的函数是否做得太多,这使得您的问题比现在可能的问题要小。

不,他不能。PHP不支持重载。每个人都应该记住复杂性+1.谢谢你。将阅读:)感谢大家的输入:)在调用函数或类的方法时,可以使用语法忽略默认参数。语法提供了一种优雅的方法。在这里检查