【发布时间】:2011-09-07 05:53:07
【问题描述】:
我有一个函数,它接受大约 10 个参数,其中大多数是可选的。我想知道我是否可以以这样一种方式实现它,即函数的用户不需要为参数的顺序而烦恼。 例如:
public function foo($arg1, $arg2, $arg3='',$arg4='', $arg5='', $arg6='', $arg7=''){}
现在,当我使用这个功能时,我可以简单地
$this->foo($arg1val, $arg2val, $arg6val);
php 中有没有办法做到这一点?
我是这样实现的: 我已经在 API 中列出了函数接受的参数,因此用户可以使用 key=>value 对在数组中以任意顺序传递参数。
例如:
public function argumentsFilter($origParams, $newParams){
$tmpArr = array();
foreach ($origParams as $origKey){
foreach($newParams as $newKey => $newVal){
if($newKey == $origKey){
$tmpArr[$origKey] = $newVal;
}
}
if(empty($tmpArr[$origKey])){
$tmpArr[$origKey] = '';
}
}
return $tmpArr;
}
public function foo($arg1, $arg2, $arg=array()){
$validArgList = array('arg3', 'arg4', 'arg5', 'arg6', 'arg7');
$correctedArgList = $this->argumentsFilter($validArgList, $arg);
}
有没有更优雅的方法来做到这一点?
【问题讨论】:
-
有tricks 可以尝试,但 IMO 传递数组是最干净的方法。如果你想像其他一些语言(例如:Python、C#)那样真正支持命名parameters,它可能不会出现any time soon