/ / Cách sử dụng Enums trong PHP 8

Cách sử dụng Enums trong PHP 8

olga vilkha bv1dhsjeWbk unsplash

Enumerations (enums) là một kiểu dữ liệu mà bạn có thể sử dụng để lưu trữ một giá trị từ một tập hợp tùy chỉnh. Chúng hoàn hảo để đại diện cho loại tùy chọn mà bạn có thể hiển thị trong danh sách thả xuống.


PHP 8.1 đã giới thiệu hỗ trợ cho phép liệt kê. Các enum này rất dễ sử dụng, nhưng chúng cung cấp các tính năng bổ sung được mượn từ lập trình hướng đối tượng.


Các phép liệt kê làm gì

Các phép liệt kê rất hữu ích khi bạn muốn làm việc với một tập hợp các giá trị liên quan cố định. Ví dụ, bạn có thể sử dụng enum để đại diện cho các bộ quần áo trong một gói thẻ hoặc loại phương tiện.

Các enums của PHP khá phức tạp, với một số tính năng nhất định được mượn từ các lớp. Bạn có thể sử dụng chúng kết hợp với gợi ý kiểu để viết mã mạnh hơn, dễ đoán hơn.

Enums cơ bản

Enums thường lưu trữ các giá trị vô hướng. Chúng tương tự như các kiểu dữ liệu nguyên thủy của C, mặc dù các enum của PHP có thể lưu trữ các giá trị chuỗi cũng như các số nguyên. Tuy nhiên, theo mặc định, các giá trị được liệt kê của PHP không có tương đương vô hướng. Chúng được gọi là kiểu liệt kê cơ bản:

enum Season
{
case Spring;
case Summer;
case Autumn;
case Winter;
}

Lưu ý cách PHP sử dụng lại từ khóa case mà bạn cũng sẽ gặp trong các câu lệnh switch. Các giá trị mà enum này đại diện chỉ đơn giản là tên của các trường hợp. Bạn có thể tham khảo một giá trị enum cụ thể bằng cú pháp sau:

EnumTypeName::EnumField

Ví dụ, để chỉ mùa đông, hãy sử dụng:

Season::Winter

Bạn có thể gán giá trị này cho một biến và kiểm tra nó với các giá trị Phần khác:

$favorite = Season::Summer;

if ($favorite == get_current_season()) {
echo "It's my favorite season!";
}

Sử dụng gợi ý kiểu, bạn có thể hạn chế các tham số hoặc trả về kiểu cho một kiểu liệt kê cụ thể. Điều này giúp tránh toàn bộ lỗi và thường làm cho mã của bạn dễ bảo trì hơn:

function get_current_season(): Season
{
$day = date("z");

if ($day < 59 || $day > 333) return Season::Winter;
if ($day < 151) return Season::Spring;
if ($day < 243) return Season::Summer;
if ($day < 334) return Season::Autumn;
}

Nếu hàm get_current_season này cố gắng trả về thứ gì đó không phải là Season, PHP sẽ tạo ra một TypeError nghiêm trọng.

Enums được hỗ trợ

PHP sử dụng thuật ngữ “enum được hỗ trợ” để chỉ một kiểu liệt kê với các giá trị. Đây có thể là số nguyên hoặc chuỗi:

enum Month: int
{
case Jan = 1;
case Feb = 2;
}

Bạn cần khai báo kiểu của một enum được sao lưu và nó phải là int hoặc string.

Bạn có thể truy cập giá trị cơ bản bằng cách sử dụng chỉ đọc giá trị tài sản:

echo Month::Jan->value;

Khi bạn sử dụng enum được hỗ trợ, bạn cũng có thể chuyển đổi sang chúng, từ giá trị vô hướng tương đương của chúng, bằng cách sử dụng từ phương pháp:

var_dump(Month::from(2));

Phương pháp liệt kê

Các enum trong PHP cũng có thể có các phương thức, làm cho chúng giống như một lớp cắt giảm. Điều này phản ánh vị trí của PHP ở đâu đó giữa ngôn ngữ thủ tục và ngôn ngữ hướng đối tượng.

Ví dụ: bạn có thể thêm phương thức đơn giản này vào tháng enum để tìm nạp số ngày từ một giá trị cụ thể:


function daysInMonth(): int {
if ($this == Month::Feb) return 28;
if (in_array($this, array(Month::Apr, Month::Jun, Month::Sep, Month::Nov))) return 30;
return 31;
}

Lưu ý rằng bạn có thể sử dụng $ này để tham chiếu đến một giá trị enum cụ thể, giống như bạn sử dụng $ this để tham chiếu đến một đối tượng cụ thể. Bạn cũng có thể sử dụng toán tử bình đẳng tiêu chuẩn, ==để so sánh các giá trị enum.

Enums cũng hỗ trợ các phương thức tĩnh. Có thể bạn sẽ không sử dụng nhiều cho những thứ này, nhưng chúng có thể hữu ích nếu bạn cần viết thứ gì đó hoạt động như một hàm tạo, ví dụ:

static function random(): Month {
return Month::from(rand(1, count(Month::cases())));
}

Liệt kê tốt hơn là không bao giờ

Các phép liệt kê là một đặc điểm chung của nhiều ngôn ngữ, bao gồm cả tổ tiên của PHP, C. Chúng là một trong những tính năng chính của bản phát hành 8.1, giúp ngôn ngữ này có tốc độ vượt trội so với nhiều đối thủ cạnh tranh của nó.

PHP đã có nhiều tính năng phù hợp để phát triển web. Khi ngôn ngữ trưởng thành, nó tiếp tục vay mượn từ những người khác và đổi mới các tính năng ban đầu.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *