我见过一些人问过类似的问题.但我确实需要对这一特定主题进行更多澄清.
我有几个函数传递几个参数.我甚至有一些约10个论点.(最初没有计划,只是随着时间的推移而增长)
查看我的源代码以查找第7个参数是什么没有任何问题,但它确实变得乏味.大多数时候我都知道要传递什么参数,而不是位置.
我有一些想法来简化我的流程.
a)传递1个参数,但用一些分隔符划分所有内容.(但这是一个坏主意!因为我仍然需要记住每个人的位置.
function myfunc('data|data|data|'){
// explode the string
}
Run Code Online (Sandbox Code Playgroud)
b)传递一个带有键和值的数组,并在我的函数中查找键名,并采取相应的行动.
function myfunc(array('arg1' => 'blah blah', 'arg2' => 'more blah')){
// loop through the array
}
Run Code Online (Sandbox Code Playgroud)
c)保持原样.
function myfunc($arg1,$arg2,$arg3,$arg4,$arg5........){
// yay
}
Run Code Online (Sandbox Code Playgroud)
所以,我正在寻找其他选项和更好的想法来处理函数增长参数列表.
在我看来,最好的方法是传入一个关联数组.这样你就可以立即看到每个参数的作用.请务必以描述性方式命名,而不是arg1
&arg2
.
关联数组的另一个优点是,您不必关心传递参数的顺序.
请记住,如果使用关联数组,则会丢失PHP本机分配默认值的方法,例如:
function doSomething($arg1 = TRUE, $arg2 = 55) { }
Run Code Online (Sandbox Code Playgroud)
因此,您需要做的是创建自己的一组默认选项,然后合并您的数组:
function doSomething( $props = array() )
{
$props = array_merge(array(
'arg1' => TRUE,
'arg2' => 55
), $props);
// Now use the $props array
}
Run Code Online (Sandbox Code Playgroud)