当我创建一个具有可选参数的函数时,我必须考虑哪一个参数最有可能被传递,并决定我在函数声明中指定它们的顺序。
使用位置不太好的$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");
所以,根据你的情况打个电话。