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
廣告

© . All rights reserved.