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


Easier way to pass optional function parameters using array

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

使用位置不太好的$commandoryParam:执行以下函数

public function myFunc($mightBeEmptyA, $mightBeEmptyB, $mandatoryParam)
{
}

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

...
$this->myFunc(array('mightBeEmptyA' => 'myValue')) ;
...
public function myFunc($params)
{
    if($params['mightBeEmptyA'])
    {
        // Do something....
    }
}

改为使用数组传入参数。处理数组中的参数所需的额外逻辑是否值得?

是的,如果函数需要许多参数。例如,一个过滤某些数据的函数,您有许多过滤器。

我通常这样做:

public function myFunc(array $args){
  $args += array(
     'mightBeEmptyA' => 'defaultVal',
     // ...
  );
  extract($args, EXTR_SKIP);
  // and here I can use $mightBeEmptyA
}

您应该这样看待func_get_args——从技术上讲,传递给函数的内容无关紧要——您可以在函数本身中对其进行排序。如果你不想,你根本不需要通过任何东西。

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

您可以使用默认参数

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

但如果出现不应该提供您的mightBeEmptyA,但需要提供mightBeEmptyB的情况。然后你就把它叫做

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

所以,根据你的情况打个电话。