PHP调用一个带有默认参数的函数,但位于参数列表的中间


PHP Call a function with default parameter, but in the middle of parameter list?

可能重复:
是否可以跳过php(5(函数调用中具有默认值的参数?

假设这是我的功能:

function myFunc($a ,$b = 'ball',$c = 'cat')
{
   echo "$a $b $c" ;
}

 myFunc("apple");   // output :  "apple ball cat"
 myFunc("apple","box"); // output : "apple box cat"

如何使用$b的默认参数调用myFunc,例如

myFunc("apple", SOMETHING_HERE , "cow" ); // output : "apple ball cow"

您不能通过在函数原型中设置默认值来做到这一点:

function myFunc($a ,$b = 'ball',$c)
{
   echo "$a $b $c" ;
}

但有一个变通办法:

function myFunc($a ,$b = null,$c = null)
{
   if ($b === null)
      $b = 'ball';
   if ($c === null)
      $c = 'cat';
   echo "$a $b $c" ;
}

您可以使用func_get_args函数和一些应该使用默认值的特殊指示(例如,传递NULL(:

function myFunc() {
 $params = func_get_args();
 $defaults = array('apple', 'ball', 'cow'); //your default values
 foreach ($params as &key => &$value) {
   if ($value === NULL) $value = $defaults[$key];
 }
myFunc('apple', NULL, 'cow');

话虽如此,我认为这样做不是最好的做法。你应该重新审视一下你的函数设计——也许你只需要稍微重构一些东西,这样它就会更直观。