PHP将数组传递给函数

cof*_*tor 4 php function

我见过一些人问过类似的问题.但我确实需要对这一特定主题进行更多澄清.

我有几个函数传递几个参数.我甚至有一些约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)

所以,我正在寻找其他选项和更好的想法来处理函数增长参数列表.

Jos*_*ber 8

在我看来,最好的方法是传入一个关联数组.这样你就可以立即看到每个参数的作用.请务必以描述性方式命名,而不是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)