PHP - Named Arguments

Tính năng Đối số Được Đặt Tên đã được giới thiệu trong PHP với phiên bản 8.0. Đây là một sự mở rộng của cơ chế hiện có để truyền các đối số vị trí đến một hàm khi gọi.

Theo mặc định, giá trị của các đối số được truyền vào sẽ được sao chép vào các đối số chính thức tương ứng ở cùng một vị trí. Tính năng của các đối số có tên trong PHP cho phép truyền giá trị dựa trên tên tham số thay vì vị trí.

Nếu chúng ta có một hàm được định nghĩa như sau −

function myfunction($x, $y) {
   statement1;
   statement2;
   . . .
}

và nó được gọi là −

myfunction(10, 20);

Trong trường hợp này, các giá trị được truyền vào các biến "x" và "y" theo thứ tự khai báo. Điều này có nghĩa là giá trị đầu tiên được gán cho đối số đầu tiên, giá trị thứ hai được gán cho đối số thứ hai, và cứ như vậy. Các biến "x" và "y" là các đối số theo vị trí.

Để truyền giá trị bằng các đối số có tên, hãy chỉ định tên tham số mà giá trị sẽ được truyền đến. Tên của tham số là tên của đối số chính thức mà không có ký hiệu "$". Giá trị cần truyền được đặt trước ký hiệu ":".

myfunction(x:10, y:20);

Example

Dưới đây là mã minh họa cách bạn có thể sử dụng named arguments trong PHP −

<?php  
   function  myfunction($x, $y) {
      echo "x = $x  y = $y";
   }

   myfunction(x:10, y:20);
?>

Nó sẽ tạo ra output

x = 10  y = 20

Việc sử dụng named arguments cho phép truyền các giá trị theo bất kỳ thứ tự nào, và không nhất thiết phải theo thứ tự mà các tham số được khai báo trong định nghĩa hàm. Chúng ta có thể gọi myfunction() như được trình bày dưới đây và nó sẽ tạo ra cùng một kết quả.

myfunction(y:20, x:10);

Với tính năng này, các tham số trở nên độc lập về thứ tự và tự tài liệu. Nó cũng cho phép bỏ qua các tham số có giá trị mặc định một cách tùy ý.

Combining Named Arguments with Positional Arguments

Các đối số được đặt tên có thể được kết hợp với các đối số theo vị trí, với điều kiện rằng các đối số được đặt tên phải đứng sau các đối số theo vị trí.

Example

<?php  
   function  myfunction($x, $y, $z) {
      echo "x = $x  y = $y  z = $z";
   }
   myfunction(10, z:20, y:30);
?>

Nó sẽ tạo ra output

x = 10  y = 30  z = 20

Tuy nhiên, nếu bạn cố gắng coi $z như một tham số vị trí,

myfunction(x:10, y:20, 30);

Trong trường hợp này, PHP sẽ gặp phải 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 cũng giới thiệu một tính năng khác cho phép sử dụng tham số đặt tên sau khi giải nén các tham số. Thay vì cung cấp giá trị cho từng tham số một cách riêng lẻ, các giá trị trong một mảng có thể được giải nén vào các tham số tương ứng, bằng cách sử dụng "..." (ba dấu chấm) trước mảng.

Example

<?php  
   function  myfunction($x, $y, $z=30) {
      echo "x = $x  y = $y  z = $z";
   }
   myfunction(...[10, 20], z:30);
?>

Nó sẽ tạo ra output

x = 10  y = 20  z = 30

Lưu ý rằng việc truyền cùng một tham số nhiều lần sẽ dẫn đến một ngoại lệ như sau −

myfunction(x:10, z:20, x:20);

Error

PHP Fatal error:  Uncaught Error: Named parameter $x 
overwrites previous argument in hello.php:7