0

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

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

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

}

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

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

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

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

4

3 回答 3

0

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

我通常这样做:

public function myFunc(array $args){

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

  extract($args, EXTR_SKIP);

  // and here I can use $mightBeEmptyA
}
于 2013-02-25T13:38:09.083 回答
0

您应该以这种方式查看func_get_args从技术上讲,您传递给函数的内容并不重要,您可以在函数本身中对其进行排序。如果您不想通过,则根本不需要传递任何东西。

public function myFunc()
{
    if (func_num_args()) {
        // has arguments
        $arg_list = func_get_args();
        ...
    } else {
        // no arguments
    }
}
于 2013-02-25T13:40:17.787 回答
0

您可以使用默认参数

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

}

但是,如果存在不应该提供您的可能BeEmptyA 但需要提供可能BeEmptyB 的情况。那么您可以像下面这样调用它

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

因此,根据您的情况接听电话。

于 2013-02-25T13:42:08.747 回答