是否可以在php中传递myfunction($ var1 =“hi”)等变量?

时间:2011-02-03 22:58:33

标签: php function variables

在php中,是否有可能将变量传递给这样的函数:

function myfunction($var1="bar", $var2="foo"){
echo $var1 . $var2; 
}

myfunction($var2="bar");

并获得以下输出:barbar?

此致 的Kristoffer

2 个答案:

答案 0 :(得分:8)

不,PHP不支持命名参数。

另一种方法是传递一个关联的参数数组,并对一组默认值进行比较/合并。 Clunky,但在某些库和框架中工作并且是一种非常常见的模式:

function myfunction($args = array()) {
    $defaults = array('var1' => 'bar', 'var2' => 'foo');
    extract(array_merge($defaults, $args));
    echo $var1 . $var2; 
}

myfunction(array('var2' => 'bar'));

答案 1 :(得分:0)

PHP中的命名参数为not yet。有一些解决方法可以实现它。 JSON或数组传递是一个。但是一些PHP内置函数将此方法用于spurios默认值:

function yourfunction($var1=NULL, $var2=NULL) {
     $var1 or $var1 = "bar";
     $var2 or $var2 = "foo";
     $var3 or $var3 = "jip";

     echo $var1 . $var2;
}

调用语法为:

yourfunction(null, "baz");

所以它在语义上更多地基于索引参数,而不是命名参数。而诀窍是在函数初始化代码中推迟了默认值(类似于类型检查等)。

更古怪的选项(仅适用于标量)是json或url参数:

yourfunction("var2=bar;var3=xyz");
yourfunction('{"var2":"bar"}');    // very debatable