Using PHP Enums in Laravel

Enum được thêm vào PHP 8.1 chắc mọi người cũng đã biết về PHP 8.1 rồi. Thật sự quá tuyệt với, tôi rất thích

Trong Enum chúng ta có thể cài đặt các kiểu giá trị cho biến, thông thường chúng ta thường thấy việc cài đặt các kiểu giá trị cho biến trong React, Vue, React Native, sử dụng bởi (type, interface)

Bây giờ chúng ta có thể làm điều tương tự như vậy bằng Enum

// 🎉 using enum add type string value
    enum UserRole : string{
        case Admin = 'Administrator';  
        case Guest = 'Guest'; 
        public function label(): string {
            return match($this) {
                UserRole::Admin => 'Hello Administrator',
                UserRole::Guest => 'Hello Guest',
                
            };
        } 
    }

Trong code trên ta dùng cấu hình enum UserRole, thuộc loại "string" và bên trong ta có thể cài đặt các trường hợp trả về cho từng biến 

À tôi thường thấy nhiều người viết code theo cú pháp sau, cũng như tôi ban đầu chưa dùng qua enum cũng viết giống vậy

    if($user_id===1)
        echo "Administrator";
    else
        echo "Guest";

Cho đến khi tôi sử dụng được Enum thì sẽ code như sau:

// ✅
    if($user_id===1)
        echo UserRole::Admin->label();
    else{
        // hoặc UserRole::Guest->value
        echo UserRole::Guest->label(); 
    }

Các bạn thấy đấy, đoạn code khi dùng Enum nó trông thật là phi thường và mạnh mẻ hơn rất nhiều, nhìn đoạn code đó giúp ta dễ dàng nâng cấp, dễ chỉnh sửa cho nó.

FullCode

 // 🎉 using enum add type string value
    enum UserRole : string{
        case Admin = 'Administrator';  
        case Guest = 'Guest'; 
        public function label(): string {
            return match($this) {
                UserRole::Admin => 'Hello Administrator',
                UserRole::Guest => 'Hello Guest',
                
            };
        } 
    }

    // 🚀 : login , we can check Auth::user()->id, after when login 
    $user_id = 1;

    // ❌
    if($user_id===1)
        echo "Administrator";
    else
        echo "Guest";

    // ✅
    if($user_id===1)
        echo UserRole::Admin->label();
    else{
        // hoặc UserRole::Guest->value
        echo UserRole::Guest->label(); 
    }

Ví dụ khác:

<?php

enum OrderStatus: string {
    case PENDING = 'pending';
    case PROCESSING = 'processing';
    case SHIPPED = 'shipped';
    case DELIVERED = 'delivered';

    // Phương thức để trả về nhãn (label) của trạng thái
    public function label(): string {
        return match($this) {
            OrderStatus::PENDING => 'Đang chờ xử lý',
            OrderStatus::PROCESSING => 'Đang xử lý',
            OrderStatus::SHIPPED => 'Đã giao hàng',
            OrderStatus::DELIVERED => 'Đã nhận hàng',
        };
    }
}

Tạo lớp Order để quản lý đơn hàng

<?php

class Order {
    public int $id;
    public float $totalPrice;
    public OrderStatus $status;

    public function __construct(int $id, float $totalPrice, OrderStatus $status) {
        $this->id = $id;
        $this->totalPrice = $totalPrice;
        $this->status = $status;
    }

    // Phương thức để cập nhật trạng thái đơn hàng
    public function updateStatus(OrderStatus $newStatus): void {
        $this->status = $newStatus;
    }

    // Phương thức để hiển thị thông tin đơn hàng
    public function displayOrder(): void {
        echo "Order ID: " . $this->id . "\n";
        echo "Total Price: $" . $this->totalPrice . "\n";
        echo "Status: " . $this->status->label() . "\n";
    }
}

Sử dụng lớp Order và enum OrderStatus trong giỏ hàng

// Giả sử chúng ta có một số đơn hàng trong giỏ hàng
$order1 = new Order(1, 99.99, OrderStatus::PENDING);
$order2 = new Order(2, 149.99, OrderStatus::PROCESSING);

// Hiển thị thông tin đơn hàng ban đầu
$order1->displayOrder(); // Đang chờ xử lý
$order2->displayOrder(); // Đang xử lý

// Cập nhật trạng thái đơn hàng sau khi giao hàng
$order1->updateStatus(OrderStatus::SHIPPED);
$order2->updateStatus(OrderStatus::DELIVERED);

// Hiển thị lại thông tin đơn hàng sau khi cập nhật trạng thái
echo "\nSau khi cập nhật trạng thái:\n";
$order1->displayOrder(); // Đã giao hàng
$order2->displayOrder(); // Đã nhận hàng

Sẽ được kết quả sau:

Order ID: 1
Total Price: $99.99
Status: Đang chờ xử lý

Order ID: 2
Total Price: $149.99
Status: Đang xử lý

Sau khi cập nhật trạng thái:
Order ID: 1
Total Price: $99.99
Status: Đã giao hàng

Order ID: 2
Total Price: $149.99
Status: Đã nhận hàng

 

Bài Viết Liên Quan

Messsage

Nếu bạn thích chia sẻ của tôi, đừng quên nhấn nút !ĐĂNG KÝ