PHP Named Arguments trong bài hướng dẫn này, bạn sẽ tìm hiểu về các đối số được đặt tên trong PHP và cách sử dụng chúng một cách hiệu quả trong mã code của bạn.
Giới thiệu về các đối số (Named Arguments) được đặt tên trong PHP
Kể từ PHP 8.0, bạn có thể sử dụng các đối số được đặt tên cho các hàm. Các đối số được đặt tên cho phép bạn truyền đối số vào một hàm dựa trên tên của tham số thay vì vị trí của tham số.
Ví dụ dưới đây định nghĩa một hàm tìm vị trí xuất hiện đầu tiên của một chuỗi con trong chuỗi:
<?php function find($needle, $haystack) { return strpos($haystack, $needle); }
Để gọi hàm find()
, bạn truyền các đối số dựa trên vị trí của tham số như sau:
find('awesome', 'PHP is awesome!');
Trong trường hợp này, $needle
là 'awesome'
và $haystack
là 'PHP is awesome!'
.
Tuy nhiên, cuộc gọi hàm không rõ ràng. Ví dụ, bạn không biết đối số nào là needle và đối số nào là haystack.
Đôi khi, bạn có thể vô tình mắc lỗi bằng cách truyền các đối số theo thứ tự sai. Ví dụ:
find ( 'PHP is awesome!', 'awesome' );
Điều này gây ra lỗi và rất khó khăn khi sửa lỗi.
Để tránh điều này, bạn có thể thêm comment cho các đối số như sau:
find ( 'awesome', // needle 'PHP is awesome!' // haystack );
Bình luận giúp mã code trở nên rõ ràng hơn. Tuy nhiên, điều này không mạnh mẽ.
Để cải thiện điều này, PHP 8.0 giới thiệu các đối số được đặt tên cho phép bạn chỉ định tên của tham số khi truyền đối số:
find ( $needle : 'awesome', $haystack : 'PHP is awesome!' );
Do bạn đang sử dụng các tên tham số, vị trí không cần thiết. Ví dụ, bạn có thể đổi chỗ các tham số như sau:
find( $haystack :'PHP is awesome!', $needle : 'awesome' );
Nó nên hoạt động đúng.
Bỏ qua các đối số mặc định
Đoạn code dưới đây định nghĩa một hàm tạo thành phần một liên kết (<a>
) từ văn bản, href, title và target:
<?php
function create_anchor(
$text,
$href = '#',
$title = '',
$target = '_self'
)
{
$href = $href ? sprintf('href="%s"', $href) : '';
$title = $title ? sprintf('title="%s"', $title) : '';
$target = $target ? sprintf('target="%s"', $target) : '';
return "<a $href $title $target>$text</a>";
}
Để tạo một liên kết với target là _blank
, bạn phải chỉ định tất cả các đối số mặc định cho đến đối số bạn muốn thay đổi. Ví dụ:
$link = create_anchor( 'PHP Tutorial', 'https://www.thanhne.com/', '', '_blank' ); echo $link;
Output:
<a href="https://www.thanhne.com/" target="_blank">PHP Tutorial</a>
Trong ví dụ này, bạn cần truyền dấu cách (”) cho đối số thứ ba. Nếu bạn sử dụng các đối số được đặt tên, bạn không cần phải chỉ định tất cả các giá trị mặc định. Ví dụ:
$link = create_anchor( text : 'PHP Tutorial', href : 'https://www.thanhne.com/', target: '_blank' );
Kết hợp đối số được đặt tên với đối số theo vị trí
PHP cho phép bạn gọi một hàm bằng cách sử dụng cả đối số theo vị trí và đối số được đặt tên. Và bạn cần đặt các đối số được đặt tên sau các đối số theo vị trí. Ví dụ:
$link = create_anchor( 'PHP Tutorial', 'https://www.thanhne.com/', target: '_blank' );
Trong ví dụ này:
text
là'PHP Tutorial'
.href
là'https://www.thanhne.com/'
.- Và
target
là'_blank'
.
Nếu bạn đặt các đối số được đặt tên trước các đối số theo vị trí, bạn sẽ nhận được một lỗi. Ví dụ:
create_anchor( target : '_blank', 'PHP Tutorial', 'https://www.thanhne.com/' );
Lỗi:
Không thể sử dụng đối số theo vị trí sau đối số được đặt tên
Tóm tắt
- Sử dụng đối số được đặt tên trong PHP để truyền đối số vào một hàm dựa trên tên của tham số.
- Đặt các đối số được đặt tên sau các đối số theo vị trí trong cuộc gọi hàm.