使用数组传递可选函数参数的更简单方法

时间:2013-02-25 13:34:32

标签: php function parameters parameter-passing optional-parameters

当我创建一个具有可选参数的函数时,我必须考虑哪一个更可能被传递,并且它决定了我在函数声明中指定它们的顺序。

使用不太好的$ mandatoryParam:

进行以下功能
public function myFunc($mightBeEmptyA, $mightBeEmptyB, $mandatoryParam)
{

}

这是更好的做法吗?做以下事情会更好吗?:

...
$this->myFunc(array('mightBeEmptyA' => 'myValue')) ;
...

public function myFunc($params)
{
    if($params['mightBeEmptyA'])
    {
        // Do something....
    }
}

使用数组来传递参数。处理数组中的参数需要额外的逻辑吗?

3 个答案:

答案 0 :(得分:0)

是的,如果你的函数需要很多参数。例如,过滤某些数据的函数,并且您有许多过滤器。

我通常这样做:

public function myFunc(array $args){

  $args += array(
     'mightBeEmptyA' => 'defaultVal',
     // ...
  );

  extract($args, EXTR_SKIP);

  // and here I can use $mightBeEmptyA
}

答案 1 :(得分:0)

你应该以这种方式看待func_get_args它在技术上并不重要你传递给函数你可以在函数本身中对它进行排序。如果你不想,你根本不需要传递任何东西。

public function myFunc()
{
    if (func_num_args()) {
        // has arguments
        $arg_list = func_get_args();
        ...
    } else {
        // no arguments
    }
}

答案 2 :(得分:0)

您可以使用默认参数

public function myFunc( $mandatoryParam,$mightBeEmptyA="", $mightBeEmptyB="")
{

}

但是如果有这种情况你不应该提供你的mightBeEmptyA但是需要提供mightBeEmptyB。然后你就像下面那样调用它

myFunc("mandatory","","OptionalB");

所以根据你的情况接听电话。