Hướng dẫn dùng enumeration trong PHP
PHP 8.1 cuối cùng sẽ bổ sung hỗ trợ ngôn ngữ cho các phép liệt kê. Enumerations, viết tắt của enumerations, là những kiểu chỉ có thể được khởi tạo với các giá trị cụ thể. Chúng thường được tìm thấy trong các ngôn ngữ hướng đối tượng khác, nhưng trước đây chúng yêu cầu người dùng thực hiện các giải pháp thay thế trong PHP. Show
Cú pháp cơ bảnĐây là kiểu liệt kê đơn giản: enum PostStatus { trường hợp Được phát hành; trường hợp InReview; trường hợp Bản nháp; } Les $ đã xuất bản = Trạng thái bài đăng::Được phát hành; Các phép liệt kê hoạt động giống như các lớp và giao diện. Chúng hoàn toàn tương thích với hệ thống kiểu, vì vậy bạn có thể chỉ ra rằng một hàm chỉ chấp nhận một giá trị được xác định trong một kiểu liệt kê: tốt nghiệp lớp XNUMX Bài viết trên blog { công khai chức năng __xây dựng( công khai chuỗi $ Headline, công khai chuỗi $ Nội dung, công khai Trạng thái bài đăng Trạng thái $=Trạng thái bài đăng::Bản nháp) {} } Đây là một ví dụ về việc sử dụng // VÂNG $ bài = mới Bài viết trên blog( "Bài đăng mẫu", "Một ví dụ", Trạng thái bài đăng::Bản nháp ); // TypeError: Đối số # 3 ($ Status) phải thuộc loại PostStatus $ bài = mới Bài viết trên blog( "Ví dụ bị hỏng", "Một ví dụ hỏng", "Đã gửi" ); Phiên bản đầu tiên hoạt động vì Các trường hợp liệt kê được biểu diễn dưới dạng hằng số trên đối tượng enum. Điều này có nghĩa là bạn có thể sử dụng chúng dưới dạng giá trị tĩnh và như một
phần của biểu thức hằng số. Các Bạn có thể truy cập tất cả các giá trị có sẵn trong một bảng liệt kê bằng cách sử dụng Trạng thái bài đăng::trường hợp(); // [PostStatus :: Published, PostStatus :: InReview, PostStatus :: Draft] Phép liệt kê thuần túy hoặc duy trìLes
enum PostStatus : chuỗi { trường hợp Được phát hành = "S1"; trường hợp InReview = "S2"; trường hợp Bản nháp = "S3"; } Đây Bạn có thể truy cập các giá trị đã lưu thông qua tốt nghiệp lớp XNUMX BlogPostRepository { công khai chức năng tiết kiệm(Bài viết trên blog $ Đăng) : làm mất hiệu lực { $ cái này -> chèn( "bài đăng trên blog", [ "tiêu đề" => $ Đăng -> Headline, "sung sướng" => $ Đăng -> Nội dung, "trạng thái" => $ Đăng -> Trạng thái -> giá trị ] ); } } $ bài = mới Bài viết trên blog("Thí dụ", "Bản giới thiệu", Trạng thái bài đăng::Được phát hành); (mới BlogPostRepository()) -> tiết kiệm($ bài); Ví dụ này sẽ đặt giá trị bền vững Bảng kê được hỗ trợ seul chấp nhận chuỗi và số nguyên làm giá trị. Không thể sử dụng
loại liên hợp enum PostStatus : chuỗi { trường hợp Được phát hành = "S1"; trường hợp Bản nháp = "S1"; } PHP cung cấp một phương thức tiện ích về kiểu liệt kê để tạo một thể hiện từ một giá trị đã lưu: // tìm nạp bài đăng trên blog trước đó từ cơ sở dữ liệu // trường "trạng thái" = S1 $ trạng thái = Trạng thái bài đăng::từ($ kỷ lục["trạng thái"]); Les
Thêm phương thức vào bảng liệt kêVì các phép liệt kê dựa trên các lớp, bạn cũng có thể thêm các phương thức cho chúng! enum PostStatus { trường hợp Được phát hành; trường hợp Bản nháp; công khai chức năng isPubliclyAccessible() : bool { trở lại ($ cái này ví dụ tự::Được phát hành); } } Điều này cho phép bạn duy trì hành vi theo từng trường hợp cụ thể trong bảng liệt kê của mình, thay vì sao chép nó trong cơ sở mã của bạn. Các phép liệt kê cũng có thể triển khai các giao diện: enum PostStatus thực hiện PublicAccessGatable { trường hợp Được phát hành; trường hợp Bản nháp; công khai chức năng isPubliclyAccessible() : bool { trở lại ($ cái này ví dụ tự::Được phát hành); } } Bây giờ bạn có thể chi tiêu tốt nghiệp lớp XNUMX UserAuthenticator { chức năng shouldAllowAccess(PublicAccessGatable $ Tài nguyên) : bool { trở lại ($ cái này -> người sử dang -> isAdmin() || $ Tài nguyên -> isPubliclyAccessible()); } } $ auth = mới UserAuthenticator(); // lấy một bài blog từ cơ sở dữ liệu if (!$ auth -> shouldAllowAccess($ bài -> Trạng thái)) { http_response_code(403); } Không có giới hạn nào về những gì bạn có thể làm với các phương thức enum - xét cho cùng thì chúng cũng là các phương thức PHP bình thường - nhưng nói chung, bạn sẽ mong đợi chúng thực hiện một số loại so sánh với trường hợp của ví dụ l., Sau đó trả về một giá trị tĩnh. Các phép liệt kê có thể sử dụng các nét vẽ, vì vậy bạn có thể trích xuất các phương thức hiện có mà bạn cũng đã tóm tắt theo cách này. Bạn có thể sử dụng Các phép liệt kê cũng có thể có các hằng số của riêng chúng, dưới dạng các giá trị chữ thông thường hoặc là một tham chiếu đến một trường hợp liệt kê: enum PostStatus { trường hợp Được phát hành; trường hợp Bản nháp; công khai const Trực tiếp = tự::Được phát hành; công khai const PlainConstant = "foobar"; } Điều này có thể tạo ra sự nhầm lẫn vì cùng một cú pháp được sử dụng để truy cập các trường hợp (trường hợp liệt kê) và các hằng số: $ đã xuất bản = Trạng thái bài đăng::Được phát hành; $ đồng bằng = Trạng thái bài đăng::PlainConstant; Seoul
Khi nào sử dụng phép liệt kê?Phép liệt kê dành cho những trường hợp bạn cần sự linh hoạt trong giá trị mà một biến có thể nhận, nhưng chỉ trong một tập hợp các trường hợp có thể được xác định trước. Lớp bài đăng trên blog được giới thiệu trong bài viết này là một ví dụ điển hình. Thông báo chỉ có thể ở một trong các bộ trạng thái đã biết, nhưng PHP trước đây không có cách nào dễ dàng để đạt được điều này. Trong các phiên bản cũ hơn, bạn có thể đã sử dụng phương pháp này: tốt nghiệp lớp XNUMX Trạng thái bài đăng { const Được phát hành = 0; const Bản nháp = 1; } tốt nghiệp lớp XNUMX Bài viết trên blog { công khai chức năng __xây dựng( công khai chuỗi $ Headline, công khai int Trạng thái $ ) {} } $ bài = mới Bài viết trên blog("Tiêu đề của tôi", Trạng thái bài đăng::Được phát hành); Vấn đề ở đây là $ bài = mới Bài viết trên blog("Tiêu đề của tôi", 9000); Hơn nữa, Thêm các kiểu liệt kê bản địa vào PHP là một bước để hoàn thiện hệ thống kiểu của ngôn ngữ. Cuối cùng, bạn có thể nhập các giá trị được phép để mọi người có cùng bước sóng. Nếu bạn chuyển một giá trị
không hợp lệ, bạn sẽ gặp lỗi thời gian chạy. IDE của bạn có thể giúp bạn cung cấp các giá trị chính xác tốt hơn vì IDE sẽ biết rằng Kết luậnCác phép liệt kê giải quyết một số vấn đề phổ biến cho các nhà phát triển khi làm việc trong PHP. Chúng được sử dụng để chỉ ra rằng các tham số, giá trị trả về và thuộc tính phải là một phần của tập hợp các tùy chọn được xác định trước. Các bảng liệt kê là các thực thể cơ sở mã linh hoạt mà bạn có thể giữ đơn giản ở dạng thuần túy hoặc mở rộng với các giá trị đã lưu, triển khai giao diện và phương pháp tùy chỉnh. Các phép liệt kê hoạt động giống như các đối tượng bình thường trong hầu hết các trường hợp và hỗ trợ các tính năng của lớp như Bạn có thể xem xét nội dung bảng liệt kê với Các bảng kê sẽ có trong PHP như một phần của phiên bản 8.1 vào tháng 2021 năm 8.1. Chúng đã có sẵn trong các phiên bản beta mới nhất. PHP XNUMX cũng sẽ đi kèm với một số tính năng tiện dụng khác, bao gồm các thuộc tính chỉ đọc và các kiểu giao nhau. |