1

如何调用我想使用一些默认参数和一些我传入的函数:

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 并为其他所有内容使用默认值,我该怎么做?我知道我可以传入默认值并按顺序进行,但我必须有另一种方式。谢谢你。

4

3 回答 3

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)
于 2011-04-22T16:17:47.347 回答
0

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

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

于 2011-04-22T16:16:58.110 回答
0

我看到两个解决方案:

  1. 使用空参数创建函数。当提供空值时,在函数中检查它并将其替换为默认值。这是迂回的,因为它不再在原型中指定,但确实以最小的努力提供了默认值解决方案。
  2. 将您的原型转换为带有键值对的数组参数。这类似于第一个解决方案,但您可以使用诸如array_merge组合“默认值”数组和新传递的参数值的方法。

示例 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));
于 2011-04-22T16:19:03.323 回答