命名参数的功能已在 PHP 8.0 版中引入。它是在调用时将位置参数传递给函数的现有机制的扩展。
默认情况下,传递的参数的值将复制到同一位置的相应形式参数。PHP 中命名参数的这一功能使得可以根据参数名称而不是位置来传递值。
如果我们有一个定义如下的函数 -
function myfunction($x, $y) {
statement1;
statement2;
. . .
}
它被称为 -
myfunction(10, 20);
在这种情况下,值将按声明顺序传递给变量 “x” 和 “y”。这意味着,第一个值到第一个参数,第二个值到第二个参数,依此类推。变量 “x” 和 “y” 是位置参数。
要通过命名参数传递值,请指定参数名称,该值将传递到哪个参数。参数的名称是不带 “$” 符号的形参的名称。要传递的值放在 “:” 符号前面。
myfunction(x:10, y:20);
例
这是演示如何在 PHP 中使用命名参数的代码 -
<?php
function myfunction($x, $y) {
echo "x = $x y = $y";
}
myfunction(x:10, y:20);
?>
它将产生以下输出 -
x = 10 y = 20
使用命名参数可以按任何 Sequences 传递值,而不必按照在函数定义中声明参数的相同 Sequences。我们可以调用如下所示的 myfunction(),它将产生相同的结果。
myfunction(y:20, x:10);
使用此功能,参数变得与顺序无关且自记录。它还允许任意跳过具有默认值的参数。
将命名参数与位置参数组合在一起
命名参数可以与位置参数组合,条件是命名参数必须位于位置参数之后。
<?php
function myfunction($x, $y, $z) {
echo "x = $x y = $y z = $z";
}
myfunction(10, z:20, y:30);
?>
它将产生以下输出 -
x = 10 y = 30 z = 20
但是,如果您尝试将 $z 视为位置参数,
myfunction(x:10, y:20, 30);
在这种情况下,PHP 将遇到以下错误 -
PHP Fatal error: Cannot use positional argument after
named argument in hello.php on line 7
named argument in hello.php on line 7
从数组中传递命名参数
PHP 8.1.0 还引入了另一个功能,允许在解包参数后使用 named 参数。数组中的值不是单独为每个参数提供值,而是使用 “...” 将数组中的值解包到相应的参数中。(三个点)。
例
<?php
function myfunction($x, $y, $z=30) {
echo "x = $x y = $y z = $z";
}
myfunction(...[10, 20], z:30);
?>
它将产生以下输出 -
x = 10 y = 20 z = 30
请注意,多次传递同一参数会导致异常,如下所示 -
myfunction(x:10, z:20, x:20);
误差 −
PHP Fatal error: Uncaught Error: Named parameter $x
overwrites previous argument in hello.php:7
overwrites previous argument in hello.php:7