php函数调用默认args

时间:2011-04-22 16:11:30

标签: php function args

如何调用我想使用某些默认args的函数,以及我传入的一些函数:

function genericlist (array $arr, string $name, [string $attribs = null], 
           [string $key = 'value'], [string $text = 'text'], 
           [mixed $selected = NULL], [ $idtag = false], [ $translate = false])

我只想传入$ arr,$ name,$ selected并使用其他所有内容的默认值,我该怎么做?我知道我可以传递默认值并按顺序排列,但我必须采用另一种方式。谢谢。

3 个答案:

答案 0 :(得分:1)

如果您对使用数组路由感兴趣,

array_merge可能会给您一个解决方案:

function func1($args = array())
{
   $defaults = array('X' => 10, 'Y' => 30);
   $args = array_merge($defaults, $args);
   // $args now has default arguments and user supplied arguments

   return $args;
}

func1(); // array('X' => 10, 'Y' => 30)
func1(array('X' => 40)); // array('X' => 40, 'Y' => 30)

答案 1 :(得分:0)

好吧,要么你确实传递了默认值,要么重新排序参数,以便在所有其他可选参数之前放入$ selected。

此外,您可以在PHP开发论坛上请求命名参数。

答案 2 :(得分:0)

我看到两个解决方案:

  1. 使用null参数创建函数。提供空值时,请在函数内检查它并将其替换为默认值。这是圆形的,因为它不再在原型中指定,但确实以最小的努力提供了默认值解决方案。
  2. 使用键值对将原型转换为数组参数。这与第一个解决方案类似,但您可以使用array_merge之类的方法来组合“默认值”数组和新传递的参数值。
  3. 示例1:

    function abc($foo = null, $bar = null)
    {
      // defaulting parameters
      if (is_null($foo)) $foo = 'Hello, world!'; // foo default value
      if (is_null($bar)) $bar = 123.45; // bar default value
    
      // on-ward with the function
    }
    
    // override bar, but not foo:
    abc(null, 987.65);
    

    示例2:

    function def($args)
    {
      // defaulting parameters
      $args = array_merge(
        array(
          'foo' => 'Hello, world!', // Default foo value
          'bar' => 123.45           // default bar value
        ),
        $args // override with supplied values
      );
    
      // on-ward with the function
    }
    
    // override bar, but not foo
    def(array('bar'=>987.65));