PHP - 具名参数



具名参数的功能是在 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

使用**具名参数**可以按任何顺序传递值,而不必与函数定义中声明的参数顺序相同。我们可以像下面这样调用**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

从数组中传递具名参数

PHP 8.1.0 还引入了另一个功能,允许在解包参数后使用具名参数。与其为每个参数单独提供值,不如使用“...”(三个点)在数组前面将数组中的值解包到相应的参数中。

示例

<?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
广告