我对PHP函数的默认值感到困惑。假设我有一个这样的函数:
function foo($blah, $x = "some value", $y = "some other value") {
// code here!
}
如果我想使用$x的默认参数,并为$y设置一个不同的参数呢?
我一直在尝试不同的方法,但我越来越困惑了。例如,我尝试了以下两种:
foo("blah", null, "test");
foo("blah", "", "test");
但这两种方法都不会为$x提供合适的默认参数。我还尝试通过变量名来设置它。
foo("blah", $x, $y = "test");
我满心期待这样的东西能起作用。但它完全不像我想象的那样。似乎无论我做什么,每次调用函数时,我都必须输入默认参数。我肯定遗漏了一些明显的东西。
PHP 8使用命名参数
如果我想使用参数$x的默认值,并为$y设置一个值,该怎么办?
Foo ($blah, $x = "some value", $y = "some other value")
Usage-1:
foo(blah: "blah", y: "test");
Usage-2:
// use names to address last arguments
foo("blah", y: "test");
本地函数也将使用此特性
htmlspecialchars($string, double_encode: false);
// Same as
htmlspecialchars($string, ENT_COMPAT | ENT_HTML401, 'UTF-8', false);
关于特性和文档
命名实参允许根据形参名称而不是形参位置向函数传递实参。这使得参数的含义自记录,使参数与顺序无关,并允许任意跳过默认值。
支持的想法
Netbeans 12.3完全支持PHP 8.0语法,包括这个特性,除了命名参数的代码补全。