PHP8. 1 thêm hỗ trợ cho Enumerations. Enumeration, hay viết tắt là Enum, là một kiểu liệt kê có một số lượng cố định các giá trị có thể
Một sự tương tự phổ biến cho một Enum là phù hợp trong một cỗ bài chơi. Một bộ bài có bốn quân bài cố định. Câu lạc bộ, Kim cương, Trái tim và Spades
Trong PHP, những bộ quần áo này có thể được liệt kê bằng Enum
enum Suit {
case Clubs;
case Diamonds;
case Hearts;
case Spades;
}
Với
function enum_exists[string $enum, bool $autoload = true]: bool {}
9 Enum, giờ đây có thể thực thi các loại khi chấp nhận hoặc trả về một giá trị phù hợpfunction pick_card[Suit $suit] {}
pick_card[Suit::Clubs];
pick_card[Suit::Diamonds];
pick_card[Suit::Hearts];
pick_card[Suit::Spades];
Ngược lại với việc sử dụng các chuỗi hoặc số đặc biệt bên trong [i. e. số ma thuật] để lưu trữ và làm việc với các tham số, Enums làm cho mã ứng dụng dễ đọc hơn và tránh trạng thái ứng dụng không mong muốn
PHP8. 1 dự trữ và sử dụng từ khóa
interface UnitEnum {
public static function cases[]: array;
}
0 để khai báo Enums. Cú pháp tương tự như cú pháp trait/class/interfaceenum Suit {
case Clubs;
case Diamonds;
case Hearts;
case Spades;
}
Enums được khai báo với từ khóa
interface UnitEnum {
public static function cases[]: array;
}
0, theo sau là tên của Enum. Một Enum có thể tùy chọn khai báo interface UnitEnum {
public static function cases[]: array;
}
2 hoặc interface UnitEnum {
public static function cases[]: array;
}
3 như. Enums cũng có thể mở rộng một lớp và/hoặc triển khai các giao diệnNội bộ ở cấp trình phân tích cú pháp PHP, có một mã thông báo mới có tên
interface UnitEnum {
public static function cases[]: array;
}
4 với giá trị interface UnitEnum {
public static function cases[]: array;
}
5 được chỉ địnhEnums cũng có thể giữ một giá trị cho từng trường hợp, điều này làm cho chúng trở thành Backed Enums
enum HTTPMethods: string {
case GET = 'get';
case POST = 'post';
}
Sau đây là một ví dụ về Enum khai báo loại giá trị được hỗ trợ và triển khai giao diện
enum RolesClassLikeNamespacedEnum: string implements TestFor {
case Admin = 'Administrator';
case Guest = 'Guest';
case Moderator = 'Moderator';
}
PHP8. 1 cũng thêm một hàm
interface UnitEnum {
public static function cases[]: array;
}
6 mới để kiểm tra xem một Enum đã cho có tồn tại hay khôngfunction enum_exists[string $enum, bool $autoload = true]: bool {}
Lưu ý rằng do , hàm
interface UnitEnum {
public static function cases[]: array;
}
8 cũng trả về interface UnitEnum {
public static function cases[]: array;
}
9 cho một EnumCác enum không được hỗ trợ bằng một giá trị sẽ tự động triển khai giao diện
class FakeEnum implements UnitEnum {}
0interface UnitEnum {
public static function cases[]: array;
}
Enums không thể triển khai giao diện này một cách rõ ràng vì nó được thực hiện bên trong bởi công cụ. Điều này chỉ để hỗ trợ xác định loại Enum đã cho. Phương thức trả về một mảng gồm tất cả các trường hợp của một Enum đã cho
Các lớp PHP không được phép triển khai giao diện này và dẫn đến lỗi nếu thử
class FakeEnum implements UnitEnum {}
Fatal error: Non-enum class FakeEnum cannot implement interface UnitEnum in .. on line ...
Mặc dù, không được phép khai báo một phương thức có tên
class FakeEnum implements UnitEnum {}
3function pick_card[Suit $suit] {}
0function pick_card[Suit $suit] {}
1Nếu một Enum khai báo các giá trị được hỗ trợ vô hướng, thì Enum đó sẽ tự động gọi một giao diện
class FakeEnum implements UnitEnum {}
4. Tương tự như giao diện class FakeEnum implements UnitEnum {}
0, không thể triển khai giao diện class FakeEnum implements UnitEnum {}
4 một cách rõ ràngfunction pick_card[Suit $suit] {}
2Xem và để biết thông tin sử dụng của họ
Các lớp tiêu chuẩn không được phép triển khai giao diện này
function pick_card[Suit $suit] {}
3_______2_______4Tương tự như hạn chế không cho phép một phương thức có tên
class FakeEnum implements UnitEnum {}
3 không được phép, mọi Enum được hỗ trợ không được khai báo một phương thức Fatal error: Non-enum class FakeEnum cannot implement interface UnitEnum in .. on line ...
1 hoặc Fatal error: Non-enum class FakeEnum cannot implement interface UnitEnum in .. on line ...
2function pick_card[Suit $suit] {}
5_______2_______6Enums được triển khai nội bộ trên các lớp PHP hàng đầu và chúng kế thừa hầu hết ngữ nghĩa của lớp với các hạn chế bổ sung được áp đặt
Enums hỗ trợ không gian tên, tự động tải, chúng có thể có các phương thức [nhưng], triển khai giao diện và nhiều hành vi khác liên quan đến các lớp PHP
Một enum cơ bản chỉ đơn giản là một cấu trúc
interface UnitEnum {
public static function cases[]: array;
}
0, trong đó mỗi trường hợp được khai báo với từ khóa Fatal error: Non-enum class FakeEnum cannot implement interface UnitEnum in .. on line ...
4. Với Enums được hỗ trợ trong PHP 8. 1, PHP hiện dành riêng Fatal error: Non-enum class FakeEnum cannot implement interface UnitEnum in .. on line ...
5 làm từ dành riêng và ngăn mọi chức năng, lớp, giao diện, v.v. từ việc được tạo ra với interface UnitEnum {
public static function cases[]: array;
}
0. Nó có thể là một phần của không gian tên do những thay đổi trong cách PHP xem xét các từ khóa dành riêng trong các giá trị không gian tênTrong cấu trúc
interface UnitEnum {
public static function cases[]: array;
}
0, nó có thể chứa bất kỳ số lượng "trường hợp" nào, từ 0 đến không giới hạn. Cả hai khai báo Enum này đều hợp lệfunction pick_card[Suit $suit] {}
7function pick_card[Suit $suit] {}
8Có thể gán giá trị
interface UnitEnum {
public static function cases[]: array;
}
2 hoặc interface UnitEnum {
public static function cases[]: array;
}
3 cho từng trường hợp trong Enum. Điều này có thể hữu ích khi tuần tự hóa dữ liệu, lưu trữ chúng trong cơ sở dữ liệu, v.v.Enums giữ một giá trị, i. e. một Enum được hỗ trợ, phải
- Chỉ cho phép
2 hoặcinterface UnitEnum { public static function cases[]: array; }
3interface UnitEnum { public static function cases[]: array; }
- .
- Không được phép lưu trữ hỗn hợp các giá trị
2 vàinterface UnitEnum { public static function cases[]: array; }
3interface UnitEnum { public static function cases[]: array; }
function pick_card[Suit $suit] {}
9Để một Enum có thể liên kết các giá trị cho từng trường hợp [i. e. a Backed Enum] thì phải khai báo kiểu vô hướng tại phần khai báo Enum
Không làm như vậy dẫn đến một lỗi
pick_card[Suit::Clubs];
pick_card[Suit::Diamonds];
pick_card[Suit::Hearts];
pick_card[Suit::Spades];
0pick_card[Suit::Clubs];
pick_card[Suit::Diamonds];
pick_card[Suit::Hearts];
pick_card[Suit::Spades];
1Enums chỉ hỗ trợ các loại vô hướng
interface UnitEnum {
public static function cases[]: array;
}
2 và interface UnitEnum {
public static function cases[]: array;
}
3. Bất kỳ loại nào khác, bao gồm function pick_card[Suit $suit] {}
06, function pick_card[Suit $suit] {}
07, function pick_card[Suit $suit] {}
08, function pick_card[Suit $suit] {}
09, hoặc thậm chí là loại liên kết function pick_card[Suit $suit] {}
10 đều không được phéppick_card[Suit::Clubs];
pick_card[Suit::Diamonds];
pick_card[Suit::Hearts];
pick_card[Suit::Spades];
2_______3_______3Phần này đang trong quá trình hoàn thiện
Nếu một Enum khai báo kiểu giá trị vô hướng thì nó phải đặt giá trị cho tất cả các trường hợp
pick_card[Suit::Clubs];
pick_card[Suit::Diamonds];
pick_card[Suit::Hearts];
pick_card[Suit::Spades];
4Trong đoạn mã trên,
function pick_card[Suit $suit] {}
11 Enum được khai báo có chứa interface UnitEnum {
public static function cases[]: array;
}
2, nhưng các trường hợp không được gán giá trị. Điều này không được phép và dẫn đến lỗiVới một Backed Enum, các giá trị gán cho mỗi case phải cùng kiểu với khai báo trong type
PHP thực thi nghiêm ngặt điều này ngay cả khi không kích hoạt nghiêm ngặt_types
pick_card[Suit::Clubs];
pick_card[Suit::Diamonds];
pick_card[Suit::Hearts];
pick_card[Suit::Spades];
5pick_card[Suit::Clubs];
pick_card[Suit::Diamonds];
pick_card[Suit::Hearts];
pick_card[Suit::Spades];
6Phần này đang trong quá trình hoàn thiện
Một Enum hợp lệ không được chứa các trường hợp trùng lặp hoặc các giá trị trùng lặp. Ví dụ: cả hai khai báo này đều không hợp lệ
pick_card[Suit::Clubs];
pick_card[Suit::Diamonds];
pick_card[Suit::Hearts];
pick_card[Suit::Spades];
7pick_card[Suit::Clubs];
pick_card[Suit::Diamonds];
pick_card[Suit::Hearts];
pick_card[Suit::Spades];
8Các giá trị Enum cũng phải là duy nhất vì nó hỗ trợ truy xuất một đối tượng Enum từ một giá trị vô hướng cho trước
Bản thân tên của Enum không phân biệt chữ hoa chữ thường và nó tuân theo cách PHP xử lý các lớp và hàm theo cách không phân biệt chữ hoa chữ thường
Các trường hợp riêng lẻ trong Enum phân biệt chữ hoa chữ thường
pick_card[Suit::Clubs];
pick_card[Suit::Diamonds];
pick_card[Suit::Hearts];
pick_card[Suit::Spades];
9Enums hỗ trợ không gian tên. Chúng tuân theo cú pháp không gian tên tiêu chuẩn được sử dụng trong các lớp, đặc điểm, giao diện, chức năng, v.v.
enum Suit {
case Clubs;
case Diamonds;
case Hearts;
case Spades;
}
0Giống như PHP hỗ trợ tự động tải cho các lớp, đặc điểm và giao diện, Enums cũng hỗ trợ tự động tải
Lưu ý rằng điều này có thể yêu cầu cập nhật cho trình tạo bản đồ lớp quét các tệp để tìm các mục có thể tải tự động
Enums hỗ trợ đầy đủ tất cả các hằng số ma thuật mà PHP hỗ trợ cho các lớp
14 bao gồm đề cập đến tên của chính Enumfunction pick_card[Suit $suit] {}
15 hằng số ma thuật đề cập đến tên của Enum từ bên trong Enumfunction pick_card[Suit $suit] {}
16 trong ngữ cảnh phương thức Enumfunction pick_card[Suit $suit] {}
17 trong ngữ cảnh phương thức Enumfunction pick_card[Suit $suit] {}
Hàm lớp/đối tượng và function pick_card[Suit $suit] {}
18
function pick_card[Suit $suit] {}
Enum hoạt động tương tự như các lớp khi chúng được sử dụng với các hàm hỗ trợ kiểm tra các lớp và đối tượng
Ví dụ:
function pick_card[Suit $suit] {}
19, function pick_card[Suit $suit] {}
20, function pick_card[Suit $suit] {}
21, function pick_card[Suit $suit] {}
22 và function pick_card[Suit $suit] {}
23 [mới trong PHP 8. 0] hoạt động như thể một Enum là một đối tượng PHP tiêu chuẩnenum Suit {
case Clubs;
case Diamonds;
case Hearts;
case Spades;
}
1Enums với Thuộc tính, Phương thức và Đặc điểm
Enums được tạo theo cách mà nó có thể so sánh một trường hợp Enum với trường hợp khác. Enums phải không trạng thái, vì chúng không cho phép lưu trữ các thuộc tính trong đó
Enums có thể chứa các phương thức. Chúng cũng hỗ trợ các công cụ sửa đổi khả năng hiển thị của phương thức tiêu chuẩn cũng như các phương thức tĩnh
Đây có thể là trường hợp sử dụng khá hữu ích, chẳng hạn như khai báo phương thức
function pick_card[Suit $suit] {}
24 trả về nhãn thân thiện với người dùngenum Suit {
case Clubs;
case Diamonds;
case Hearts;
case Spades;
}
2Đoạn mã trên sử dụng
25 biểu thức được thêm vào trong PHP 8. 0function pick_card[Suit $suit] {}
Enums có thể thực hiện các giao diện. Enums phải hoàn thành các hợp đồng của các giao diện giống như lớp tiêu chuẩn phải
enum Suit {
case Clubs;
case Diamonds;
case Hearts;
case Spades;
}
3Một trong những điểm khác biệt quan trọng nhất giữa Enum và class là Enum không được phép có bất kỳ trạng thái nào. Khai báo thuộc tính, hoặc đặt thuộc tính không được phép. thuộc tính tĩnh cũng không được phép
enum Suit {
case Clubs;
case Diamonds;
case Hearts;
case Spades;
}
4_______0_______5Hơn nữa, các thuộc tính cài đặt động cũng không được phép
enum Suit {
case Clubs;
case Diamonds;
case Hearts;
case Spades;
}
6_______0_______7Mặc dù bản thân các trường hợp Enum là các đối tượng, nhưng không được phép khởi tạo chúng bằng cấu trúc
function pick_card[Suit $suit] {}
26Cả hai cấu trúc
function pick_card[Suit $suit] {}
26 sau đây đều không được phépenum Suit {
case Clubs;
case Diamonds;
case Hearts;
case Spades;
}
8Phần này đang trong quá trình hoàn thiện
Enums được khai báo nội bộ là cuối cùng và Enum không được kế thừa từ Enum khác hoặc một lớp
enum Suit {
case Clubs;
case Diamonds;
case Hearts;
case Spades;
}
9enum HTTPMethods: string {
case GET = 'get';
case POST = 'post';
}
0Nếu một lớp cố gắng mở rộng một Enum, điều đó cũng sẽ dẫn đến lỗi vì tất cả các Enum đều được khai báo là cuối cùng
enum HTTPMethods: string {
case GET = 'get';
case POST = 'post';
}
1enum HTTPMethods: string {
case GET = 'get';
case POST = 'post';
}
2Enums có thể
function pick_card[Suit $suit] {}
29 trait, miễn là trait đó không khai báo bất kỳ thuộc tính nàoenum HTTPMethods: string {
case GET = 'get';
case POST = 'post';
}
3Nếu các đặc điểm được sử dụng chứa bất kỳ thuộc tính nào [tĩnh hoặc thuộc tính khác], thì việc sử dụng đặc điểm đó sẽ dẫn đến một lỗi nghiêm trọng
enum HTTPMethods: string {
case GET = 'get';
case POST = 'post';
}
4enum HTTPMethods: string {
case GET = 'get';
case POST = 'post';
}
5Để ngăn các đối tượng Enum có bất kỳ trạng thái nào và để đảm bảo hai Enum có thể so sánh được, Enums không cho phép triển khai một số phương thức ma thuật
30. Để ngăn việc duy trì trạng thái trong các đối tượng Enumfunction pick_card[Suit $suit] {}
31. Để ngăn việc gán thuộc tính động và duy trì trạng tháifunction pick_card[Suit $suit] {}
32. Enums không hỗ trợ cấu trúcfunction pick_card[Suit $suit] {}
33 tất cảfunction pick_card[Suit $suit] {}
34. Enums không được duy trì trạng tháifunction pick_card[Suit $suit] {}
35. Enums là đối tượng không thể sao chépfunction pick_card[Suit $suit] {}
36. Enums không hỗ trợ các phương pháp vòng đờifunction pick_card[Suit $suit] {}
37. Enums không hỗ trợ các phương pháp vòng đờifunction pick_card[Suit $suit] {}
38. Để ngăn trạng thái ép buộc đối với các đối tượng Enumfunction pick_card[Suit $suit] {}
Tất cả các khai báo phương pháp ma thuật sau đây đều không được phép
enum HTTPMethods: string {
case GET = 'get';
case POST = 'post';
}
6Nếu chúng được khai báo, nó sẽ gây ra lỗi nghiêm trọng với thông báo tương tự như thế này
enum HTTPMethods: string {
case GET = 'get';
case POST = 'post';
}
7Enums lưu trữ các giá trị cố định, với các giá trị được hỗ trợ tùy chọn và chúng không cho phép trạng thái. Chúng phục vụ các mục đích rõ ràng khác nhau, nhưng Enums chia sẻ một số ngữ nghĩa với các lớp
ClassesEnumsSyntax_______2_______39function pick_card[Suit $suit] {}
40✔✘✔✘✔✔✔✔✔✔✔✘✔✔✔✘Hằng số ma thuật. function pick_card[Suit $suit] {}
14, function pick_card[Suit $suit] {}
15, v.v. ✔✔ function pick_card[Suit $suit] {}
45Không bằngBằng nhauHỗ trợHỗ trợ không có thuộc tínhSử dụng Enum
Trường hợp sử dụng chính của Enums là loại an toàn. Công cụ PHP sẽ đảm bảo rằng giá trị được truyền hoặc trả về thuộc về một trong các giá trị được phép. Không cần phải xác thực các giá trị đã truyền thuộc về một trong các loại được phép, công cụ PHP sẽ thực thi nó và cho phép các IDE cũng như trình phân tích tĩnh làm nổi bật các lỗi tiềm ẩn
Với Backed Enums, có thể lưu trữ các giá trị được liệt kê trong cơ sở dữ liệu hoặc bộ lưu trữ khác và khôi phục một đối tượng giống hệt nhau theo chương trình
Tại bất kỳ thời điểm nào, hai Enums giữ cùng một giá trị được coi là giống hệt nhau, giống như cách PHP coi hai chuỗi giống hệt nhau. Đây là sự khác biệt chính giữa hai đối tượng, bởi vì hai đối tượng từ một lớp khởi tạo không được coi là giống hệt nhau mặc dù chúng giữ chính xác các giá trị giống nhau
enum HTTPMethods: string {
case GET = 'get';
case POST = 'post';
}
8Enums có thể được sử dụng như các loại tham số, trả về và thuộc tính. Khi tên Enum được sử dụng, các giá trị được truyền/đặt/trả về phải là một trong các giá trị được liệt kê
enum Suit {
case Clubs;
case Diamonds;
case Hearts;
case Spades;
}
enum RolesClassLikeNamespacedEnum: string implements TestFor {
case Admin = 'Administrator';
case Guest = 'Guest';
case Moderator = 'Moderator';
}
0Hàm
function pick_card[Suit $suit] {}
46 chấp nhận một giá trị liệt kê là function enum_exists[string $enum, bool $autoload = true]: bool {}
9 và việc chuyển bất kỳ giá trị nào khác sẽ dẫn đến một giá trị function pick_card[Suit $suit] {}
48. Điều này có thể cải thiện đáng kể mã vì PHP xác thực các giá trị đã truyền mà không cần phải viết các xác nhận bổ sung bên trong hàm function pick_card[Suit $suit] {}
46enum RolesClassLikeNamespacedEnum: string implements TestFor {
case Admin = 'Administrator';
case Guest = 'Guest';
case Moderator = 'Moderator';
}
1Nếu bất kỳ giá trị nào khác với giá trị
function enum_exists[string $enum, bool $autoload = true]: bool {}
9 Enum được chuyển, nó sẽ gây ra lỗi loạienum RolesClassLikeNamespacedEnum: string implements TestFor {
case Admin = 'Administrator';
case Guest = 'Guest';
case Moderator = 'Moderator';
}
2______12_______3Nó cũng không cho phép sử dụng các giá trị từ Enum khác
enum RolesClassLikeNamespacedEnum: string implements TestFor {
case Admin = 'Administrator';
case Guest = 'Guest';
case Moderator = 'Moderator';
}
4enum RolesClassLikeNamespacedEnum: string implements TestFor {
case Admin = 'Administrator';
case Guest = 'Guest';
case Moderator = 'Moderator';
}
5Hơn nữa, nếu giá trị Enum không xác định được sử dụng, nó sẽ gây ra hằng số lớp không xác định vì giá trị Enum và hằng số lớp có chung cú pháp
Mỗi Enum chứa một thuộc tính
function pick_card[Suit $suit] {}
51 đề cập đến tên của thuộc tính. Giá trị này là chỉ đọcenum RolesClassLikeNamespacedEnum: string implements TestFor {
case Admin = 'Administrator';
case Guest = 'Guest';
case Moderator = 'Moderator';
}
6Trong một Backed Enum, cũng có thuộc tính
function pick_card[Suit $suit] {}
52 cho giá trị được hỗ trợ [hoặc là interface UnitEnum {
public static function cases[]: array;
}
2 hoặc là interface UnitEnum {
public static function cases[]: array;
}
3]enum RolesClassLikeNamespacedEnum: string implements TestFor {
case Admin = 'Administrator';
case Guest = 'Guest';
case Moderator = 'Moderator';
}
7Cố gắng thay đổi thuộc tính
function pick_card[Suit $suit] {}
51 hoặc function pick_card[Suit $suit] {}
52 sẽ dẫn đến lỗienum RolesClassLikeNamespacedEnum: string implements TestFor {
case Admin = 'Administrator';
case Guest = 'Guest';
case Moderator = 'Moderator';
}
8enum RolesClassLikeNamespacedEnum: string implements TestFor {
case Admin = 'Administrator';
case Guest = 'Guest';
case Moderator = 'Moderator';
}
9Hơn nữa, Enums không có giá trị được hỗ trợ [] không có thuộc tính
function pick_card[Suit $suit] {}
52. Chỉ Backed Enums [] có thuộc tính function pick_card[Suit $suit] {}
52. Cố gắng sử dụng một thuộc tính không xác định [bao gồm cả function pick_card[Suit $suit] {}
52] hiện đang đưa ra một cảnh báo trong PHP 8. 1function enum_exists[string $enum, bool $autoload = true]: bool {}
0function enum_exists[string $enum, bool $autoload = true]: bool {}
1Cả
class FakeEnum implements UnitEnum {}
0 và class FakeEnum implements UnitEnum {}
4 Enums đều hỗ trợ một phương thức function pick_card[Suit $suit] {}
66, phương thức này trả về tất cả các giá trị của Enumfunction enum_exists[string $enum, bool $autoload = true]: bool {}
2Phương thức
function pick_card[Suit $suit] {}
67 trả về một mảng gồm tất cả các Enum có thể. Các giá trị trả về là chính các đối tượng Enum chứ không phải thuộc tính tên hoặc giá trịNhận Enum theo giá trị được hỗ trợ
Tất cả các Backed Enums[] đều hỗ trợ các phương thức
Fatal error: Non-enum class FakeEnum cannot implement interface UnitEnum in .. on line ...
1 và Fatal error: Non-enum class FakeEnum cannot implement interface UnitEnum in .. on line ...
2 cho phép truy xuất một thể hiện từ giá trị được hỗ trợfunction enum_exists[string $enum, bool $autoload = true]: bool {}
3Nếu không có Enum theo giá trị đó, PHP sẽ đưa ra một ngoại lệ
function pick_card[Suit $suit] {}
71Ngoài ra còn có một phương thức
Fatal error: Non-enum class FakeEnum cannot implement interface UnitEnum in .. on line ...
2, trả về function pick_card[Suit $suit] {}
07 nếu một Enum không tồn tại bởi giá trị đófunction enum_exists[string $enum, bool $autoload = true]: bool {}
4Cả hai và Enums đều có thể được tuần tự hóa và hủy đăng ký bằng cách sử dụng các hàm
function pick_card[Suit $suit] {}
74 và function pick_card[Suit $suit] {}
75 tích hợpBiểu mẫu được đánh số tự động sẽ có mã định danh
function pick_card[Suit $suit] {}
76 và tên của Enumfunction enum_exists[string $enum, bool $autoload = true]: bool {}
5_______1_______6Trên Backed Enums, các giá trị được tuần tự hóa tiếp tục là tên của thành viên;
function enum_exists[string $enum, bool $autoload = true]: bool {}
7function enum_exists[string $enum, bool $autoload = true]: bool {}
8Lưu ý rằng cú pháp unserialization không tương thích với các phiên bản PHP cũ hơn. Bất kỳ chuỗi Enums được tuần tự hóa nào cũng không thể được hủy đăng ký trên các phiên bản PHP cũ hơn. Cố gắng làm như vậy dẫn đến một cảnh báo [_______2_______77] và
function pick_card[Suit $suit] {}
75 trả về function pick_card[Suit $suit] {}
79Tác động tương thích ngược
Enums sử dụng cú pháp mới và không thể sử dụng Enums trong các phiên bản PHP trước 8. 1
Các cách tiếp cận PHP gốc như myclabs/php-enum không tương thích với PHP 8. 1 bảng liệt kê
Cú pháp Enum sẽ dẫn đến một
function pick_card[Suit $suit] {}
80 trong PHP < 8. 1. Hơn nữa, không thể trong các phiên bản PHP cũ hơn