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);
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 ý.
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í.
<?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
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.
<?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