Php 简明教程
PHP - Named Arguments
PHP 的 8.0 版本引入了命名参数功能。它是对调用函数时传递位置参数现有机制的扩展。
默认情况下,传递的参数值会复制到相同位置上的对应形式参数。PHP 中的此命名参数功能使得可以根据参数名称传递值,而不是根据位置传递。
如果我们定义了一个函数,如下所示 −
function myfunction($x, $y) {
statement1;
statement2;
. . .
}
并且它被调用为 −
myfunction(10, 20);
在此情况下,这些值按声明顺序传递给变量“x”和“y”。也就是说,第一个值传递给第一个参数,第二个值传递给第二个参数,以此类推。变量“x”和“y”是位置自变量。
要通过已命名自变量传递值,请指定要将参数传递给其值的变量名。参数的名称是形式参数的名称,但没有“$”符号。要传递的值放在冒号“:”符号的前面。
myfunction(x:10, y:20);
Example
这是一段展示了如何在 PHP 中使用 named arguments 的代码 −
<?php
function myfunction($x, $y) {
echo "x = $x y = $y";
}
myfunction(x:10, y:20);
?>
它将生成以下 output −
x = 10 y = 20
通过使用 named arguments ,可以按照任何顺序传递值,并且不一定要与参数在函数定义中声明的顺序相同。我们可以按如下所示调用 myfunction() ,它将生成相同的结果。
myfunction(y:20, x:10);
借助此特性,自变量将独立于顺序并且可以自文档化。它还可以跳过带有默认值的自变量。
Combining Named Arguments with Positional Arguments
可以将已命名自变量与位置自变量结合使用,条件是已命名自变量必须位于位置自变量之后。
Example
<?php
function myfunction($x, $y, $z) {
echo "x = $x y = $y z = $z";
}
myfunction(10, z:20, y:30);
?>
它将生成以下 output −
x = 10 y = 30 z = 20
但是,如果你尝试将 $z 作为位置自变量处理,
myfunction(x:10, y:20, 30);
在此情况下,PHP 将遇到以下 error −
PHP Fatal error: Cannot use positional argument after
named argument in hello.php on line 7
Passing Named Arguments from an Array
PHP 8.1.0 还引入了另一项特性,该特性允许在取消参数打包后使用已命名自变量。可以使用数组中的“…”(三个点),而不是单独向每个参数提供值,将数组中的值解包到对应的参数中。
Example
<?php
function myfunction($x, $y, $z=30) {
echo "x = $x y = $y z = $z";
}
myfunction(...[10, 20], z:30);
?>
它将生成以下 output −
x = 10 y = 20 z = 30
请注意,多次传递同一个参数将导致异常,如下所示 −
myfunction(x:10, z:20, x:20);
Error −
PHP Fatal error: Uncaught Error: Named parameter $x
overwrites previous argument in hello.php:7