在php中,是否有可能将变量传递给这样的函数:
function myfunction($var1="bar", $var2="foo"){
echo $var1 . $var2;
}
myfunction($var2="bar");
并获得以下输出:barbar?
此致 的Kristoffer
答案 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