将多个参数传递给PHP函数

29

对于这个新手问题我很抱歉,我的一个函数需要两个参数,一个是数组,一个是变量function createList($array, $var) {}。我有另一个函数调用createList,但只传递一个参数$var,doSomething($var);它没有包含该数组的本地副本。在PHP中,如何只向期望两个参数的函数传递一个参数?

function createList (array $args = array()) {
    //how do i define the array without iterating through it?
 $args += $array; 
 $args += $var;


}
3个回答

59

如果您使用的是PHP 5.6+,则有一个新的变量参数语法:省略号关键字。
它只是将所有参数转换为数组。

function sum(...$numbers) {
    $acc = 0;
    foreach ($numbers as $n) {
        $acc += $n;
    }
    return $acc;
}
echo sum(1, 2, 3, 4);

文档:... 在 PHP 5.6+ 中


5
值得注意的是,这样做的好处在于您现在可以对变量数量进行类型提示,正如所接受的答案提到的那样,这是使用 func_get_args() 的一个巨大弊端。 - sjagr

21

您有几个选项。

首先是使用可选参数。

  function myFunction($needThis, $needThisToo, $optional=null) {
    /** do something cool **/
  }
另一种方法是避免命名任何参数(这种方法不被推荐,因为编辑器无法提供提示,并且方法签名中没有文档)。
 function myFunction() {
      $args = func_get_args();

      /** now you can access these as $args[0], $args[1] **/
 }

太棒了,我不知道你可以将参数设置为null,谢谢! - Undermine2k

4

您可以在函数声明中不指定参数,然后使用PHP的func_get_argfunc_get_args来获取参数。

function createList() {
   $arg1 = func_get_arg(0);
   //Do some type checking to see which argument it is.
   //check if there is another argument with func_num_args.
   //Do something with the second arg.
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接