Pemeliharaan untuk proyek ini didukung melalui Tidelift.
Pertama, dan yang terpenting, SplEnum
tidak terintegrasi dengan PHP, Anda harus menginstal ekstensi secara terpisah.
Menggunakan enum alih-alih konstanta kelas memberikan keuntungan sebagai berikut:
Anda dapat menggunakan enum sebagai tipe parameter: function setAction(Action $action) {
Anda dapat menggunakan enum sebagai tipe kembalian: function getAction() : Action {
Anda dapat memperkaya enum dengan metode (misalnya format
, parse
,…)
Anda dapat memperluas enum untuk menambahkan nilai baru (jadikan enum final
untuk mencegahnya)
Anda bisa mendapatkan daftar semua nilai yang mungkin (lihat di bawah)
Kelas Enum ini tidak dimaksudkan untuk menggantikan konstanta kelas, tetapi hanya digunakan jika memungkinkan.
composer require myclabs/php-enum
gunakan MyCLabsEnumEnum;/** * Action enum * * @extends Enum<Action::*> */final class Action extends Enum {private const VIEW = 'lihat';private const EDIT = 'edit'; }
$action = Action::VIEW();// atau dengan kunci dinamis:$action = Action::$key();// atau dengan nilai dinamis:$action = Action::from($value);/ / atau$aksi = Tindakan baru($nilai);
Seperti yang Anda lihat, metode statis diimplementasikan secara otomatis untuk menyediakan akses cepat ke nilai enum.
Salah satu keuntungan dibandingkan menggunakan konstanta kelas adalah dapat menggunakan enum sebagai tipe parameter:
fungsi setAction(Aksi $aksi) {// ...}
__construct()
Konstruktor memeriksa apakah nilainya ada di enum
__toString()
Anda dapat echo $myValue
, ini akan menampilkan nilai enum (nilai konstanta)
getValue()
Mengembalikan nilai enum saat ini
getKey()
Mengembalikan kunci dari nilai saat ini di Enum
equals()
Menguji apakah instance enum sama (mengembalikan true
jika nilai enum sama, false
jika sebaliknya)
Metode statis:
from()
Membuat instance Enum, memeriksa apakah nilainya ada di enum
metode toArray()
Mengembalikan semua nilai yang mungkin sebagai array (nama konstan dalam kunci, nilai konstan dalam nilai)
keys()
Mengembalikan nama (kunci) dari semua konstanta di kelas Enum
values()
Mengembalikan instance kelas Enum dari semua konstanta Enum (nama konstan dalam kunci, instance Enum dalam nilai)
isValid()
Periksa apakah nilai yang diuji valid pada set enum
isValidKey()
Periksa apakah kunci yang diuji valid pada set enum
assertValidValue()
Tegaskan bahwa nilainya valid pada set enum, sebaliknya berikan pengecualian
search()
Mengembalikan kunci untuk nilai yang dicari
kelas terakhir Action memperluas Enum {private const VIEW = 'lihat';private const EDIT = 'edit'; }// Metode statis:$action = Action::VIEW();$action = Action::EDIT();
Pembantu metode statis diimplementasikan menggunakan __callStatic()
.
Jika Anda peduli dengan pelengkapan otomatis IDE, Anda dapat menerapkan sendiri metode statis:
kelas terakhir Action memperluas Enum {private const VIEW = 'view';/** * @return Action */public static function VIEW() {return new Action(self::VIEW); } }
atau Anda dapat menggunakan phpdoc (misalnya didukung di PhpStorm):
/** * @method static Action VIEW() * @method static Action EDIT() */final class Action extends Enum {private const VIEW = 'lihat';private const EDIT = 'edit'; }
Enum asli tiba di PHP dalam versi 8.1: https://www.php.net/enumerations
Jika proyek Anda menjalankan PHP 8.1+ atau perpustakaan Anda memilikinya sebagai persyaratan minimum, Anda harus menggunakannya daripada perpustakaan ini.
Saat bermigrasi dari myclabs/php-enum
, upayanya akan kecil jika penggunaannya sesuai dengan yang disarankan:
konstanta pribadi
kelas akhir
tidak ada metode yang diganti
Perubahan untuk migrasi:
Definisi kelas harus diubah dari
/** * @method static Action VIEW() * @method static Action EDIT() */final class Action extends Enum {private const VIEW = 'lihat';private const EDIT = 'edit'; }
ke
enum Tindakan: string{case VIEW = 'view';case EDIT = 'edit'; }
Semua tempat di mana kelas digunakan sebagai tipe akan terus berfungsi.
Penggunaan dan perubahan yang diperlukan:
Operasi | myclabs/php-enum | enum asli |
---|---|---|
Dapatkan sebuah instance akan berubah dari | $enumCase = Action::VIEW() | $enumCase = Action::VIEW |
Buat enum dari nilai yang didukung | $enumCase = new Action('view') | $enumCase = Action::from('view') |
Dapatkan nilai yang didukung dari instance enum | $enumCase->getValue() | $enumCase->value |
Bandingkan dua contoh enum | $enumCase1 == $enumCase2 atau $enumCase1->equals($enumCase2) | $enumCase1 === $enumCase2 |
Dapatkan kunci/nama instance enum | $enumCase->getKey() | $enumCase->name |
Dapatkan daftar semua kemungkinan contoh enum | Action::values() | Action::cases() |
Dapatkan peta kemungkinan contoh enum yang dipetakan berdasarkan nama | Action::values() | array_combine(array_map(fn($case) => $case->name, Action::cases()), Action::cases()) atau (new ReflectionEnum(Action::class))->getConstants() |
Dapatkan daftar semua kemungkinan nama enum | Action::keys() | array_map(fn($case) => $case->name, Action::cases()) |
Dapatkan daftar semua kemungkinan nilai enum yang didukung | Action::toArray() | array_map(fn($case) => $case->value, Action::cases()) |
Dapatkan peta kemungkinan nilai yang didukung dari enum yang dipetakan berdasarkan nama | Action::toArray() | array_combine(array_map(fn($case) => $case->name, Action::cases()), array_map(fn($case) => $case->value, Action::cases())) atau array_map(fn($case) => $case->value, (new ReflectionEnum(Action::class))->getConstants())) |
PHP 8.1+ enum asli
Pemetaan enum doktrin
Integrasi Symfony ParamConverter
Integrasi PHPStan