Giới thiệu
Trong Laravel 11, việc xử lý logic điều kiện trở nên dễ dàng hơn nhờ các helper functions mạnh mẽ. Các hàm như when(), optional(), once(), và unless() giúp bạn viết mã ngắn gọn, rõ ràng, và dễ đọc khi làm việc với các điều kiện phức tạp. Chúng cũng giúp giảm thiểu việc viết các câu điều kiện if hoặc switch cồng kềnh, giúp mã nguồn sạch sẽ hơn.
Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng những hàm này thông qua các ví dụ thực tế trong ứng dụng Laravel.
1. Hàm when()
Hàm when() giúp bạn thực thi một đoạn mã hoặc logic chỉ khi một điều kiện cụ thể được thỏa mãn. Hàm này hoạt động như một câu lệnh if, nhưng gọn gàng hơn và dễ đọc hơn khi xử lý chuỗi logic.
Cách sử dụng:
- Thực thi logic nếu điều kiện là true:
$discount = 0;
$price = 100;
$finalPrice = $price->when($price > 50, function($price) {
return $price * 0.9; // Giảm 10% nếu giá lớn hơn 50
});
echo $finalPrice; // 90Trong ví dụ này, nếu điều kiện price > 50 là đúng, hàm when() sẽ áp dụng giảm giá 10%.
- Thực thi logic khác nếu điều kiện là false:
$finalPrice = $price->when($price > 50, function($price) {
return $price * 0.9;
}, function($price) {
return $price; // Không giảm giá nếu giá nhỏ hơn hoặc bằng 50
});Hàm when() giúp bạn xử lý điều kiện nhanh chóng và rõ ràng hơn trong quá trình viết mã.
2. Hàm optional()
Hàm optional() cho phép bạn gọi các phương thức trên một đối tượng mà không cần kiểm tra xem đối tượng đó có tồn tại hay không. Điều này giúp tránh lỗi null pointer exception khi truy cập các thuộc tính hoặc phương thức của một đối tượng null.
Cách sử dụng:
- Truy cập thuộc tính của đối tượng có thể là
null:
$user = null;
$name = optional($user)->name;
echo $name; // Không gây lỗi, trả về nullNếu $user là null, optional($user)->name sẽ trả về null thay vì gây ra lỗi.
- Gọi phương thức trên đối tượng
null:
$invoice = optional($user->invoice)->total();
echo $invoice; // Trả về null nếu không có invoiceSử dụng optional() giúp bạn tránh phải viết nhiều câu lệnh if để kiểm tra xem đối tượng có tồn tại hay không trước khi thao tác.
3. Hàm once()
Hàm once() giúp bạn thực thi một đoạn mã hoặc một logic chỉ một lần trong suốt quá trình chạy ứng dụng. Điều này hữu ích khi bạn muốn đảm bảo rằng một tác vụ nào đó chỉ được thực hiện duy nhất một lần.
Cách sử dụng:
- Thực thi một đoạn mã một lần duy nhất:
once(function() {
echo 'Chạy một lần!';
});Ngay cả khi bạn gọi once() nhiều lần, đoạn mã này chỉ được thực hiện một lần.
- Áp dụng cho logic phức tạp:
$discount = once(function() {
return 10; // Chỉ tính chiết khấu một lần
});
echo $discount; // 10Hàm once() rất hữu ích trong các trường hợp bạn cần thực hiện một công việc quan trọng mà không muốn nó lặp lại nhiều lần.
4. Hàm unless()
Hàm unless() hoạt động ngược lại với when(), nghĩa là nó thực thi một đoạn mã nếu điều kiện không được thỏa mãn. Đây là cách hiệu quả để tránh viết câu lệnh if (!condition).
Cách sử dụng:
- Thực thi logic nếu điều kiện là false:
$isAdmin = false;
$userRole = unless($isAdmin, function() {
return 'Người dùng không phải là admin';
});
echo $userRole; // Người dùng không phải là adminTrong ví dụ trên, đoạn mã sẽ được thực hiện vì $isAdmin có giá trị là false.
- Thêm logic thay thế nếu điều kiện là true:
$isAdmin = true;
$userRole = unless($isAdmin, function() {
return 'Người dùng không phải là admin';
}, function() {
return 'Người dùng là admin';
});
echo $userRole; // Người dùng là adminHàm unless() giúp bạn viết logic điều kiện ngược một cách tự nhiên và dễ hiểu hơn.
5. Tổng kết các hàm:
| Hàm | Mô tả |
|---|---|
when() | Thực thi logic khi điều kiện là true. |
optional() | Gọi phương thức hoặc truy cập thuộc tính trên đối tượng có thể là null. |
once() | Thực thi logic chỉ một lần trong suốt quá trình chạy ứng dụng. |
unless() | Thực thi logic khi điều kiện là false. |
6. Ví dụ tổng hợp
<?php
public function handleDiscount($price, $isAdmin)
{
// Áp dụng giảm giá nếu giá lớn hơn 50
$finalPrice = $price->when($price > 50, function($price) {
return $price * 0.9;
});
// Kiểm tra quyền của người dùng
$userRole = unless($isAdmin, function() {
return 'Người dùng không phải là admin';
}, function() {
return 'Người dùng là admin';
});
// Thực hiện logic một lần duy nhất
once(function() {
echo 'Áp dụng giảm giá duy nhất một lần!';
});
// Xử lý với đối tượng có thể là null
$invoiceTotal = optional($user->invoice)->total();
return [
'finalPrice' => $finalPrice,
'userRole' => $userRole,
'invoiceTotal' => $invoiceTotal,
];
}Trong ví dụ này, chúng ta đã sử dụng tất cả các hàm when(), optional(), once(), và unless() để xử lý logic điều kiện phức tạp một cách gọn gàng và dễ hiểu.
7. Kết luận
Các hàm helper như when(), optional(), once(), và unless() trong Laravel 11 giúp bạn dễ dàng xử lý các logic điều kiện mà không cần phải viết quá nhiều câu lệnh if. Những hàm này giúp mã nguồn trở nên sạch sẽ, dễ đọc và giảm thiểu các lỗi tiềm ẩn liên quan đến null hoặc logic phức tạp. Hãy áp dụng chúng để tối ưu hóa mã của bạn và tạo ra các ứng dụng Laravel chất lượng cao.
Tác giả: Đội ngũ CodeTuthub.com









