2011-04-22 89 views
1

如何我做一个函数的调用,我想用一些默认指定参数和一些部分我通过:PHP函数调用默认ARGS

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

我只是想通过在$ ARR,$名称,$选择并使用其他值的默认值,我该怎么做?我知道我可以传递默认值并按顺序进行,但我必须以另一种方式进行。谢谢。

回答

0

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

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

+0

是啊,我觉得我得到的php混合了一些其他语言。我可能不会在PHP开发论坛中请求这个功能...... – milan 2011-04-25 22:26:43

+0

我知道关于默认值的传递,这是我最终做的,所以我将你的回应标记为正确的。谢谢。 – milan 2011-04-25 22:28:03

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) 
+0

这可能适用,但比我需要的更复杂。我认为有一个更好的方法,但我认为我得到PHP混入了JavaScript或什么的。无论如何,我只是打入默认值作为参数。谢谢你的帮助。 – milan 2011-04-25 22:21:50

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)); 
+0

感谢您的回复,但这比我需要更复杂。我认为有更好的方法,但我认为我得到PHP与JavaScript或其他语言混淆。无论如何,我只是打入默认值作为参数。 – milan 2011-04-25 22:22:58