รองรับการบำรุงรักษาโครงการนี้ผ่าน Tidelift
ประการแรกและโดยหลักแล้ว SplEnum
ไม่ได้รวมเข้ากับ PHP คุณต้องติดตั้งส่วนขยายแยกต่างหาก
การใช้ enum แทนค่าคงที่ของคลาสมีข้อดีดังต่อไปนี้:
คุณสามารถใช้ enum เป็นประเภทพารามิเตอร์: function setAction(Action $action) {
คุณสามารถใช้ enum เป็นประเภทการส่งคืน: function getAction() : Action {
คุณสามารถเพิ่มแจงนับด้วยวิธีการ (เช่น format
, parse
, ... )
คุณสามารถขยาย enum เพื่อเพิ่มค่าใหม่ (ทำให้ enum ของคุณ final
เพื่อป้องกัน)
คุณสามารถรับรายการค่าที่เป็นไปได้ทั้งหมด (ดูด้านล่าง)
คลาส Enum นี้ไม่ได้มีวัตถุประสงค์เพื่อแทนที่ค่าคงที่ของคลาส แต่จะใช้เฉพาะเมื่อเหมาะสมเท่านั้น
composer require myclabs/php-enum
ใช้ MyCLabsEnumEnum;/** * Action enum * * @extends Enum<Action::*> */final class การกระทำขยาย Enum {private const VIEW = 'view';private const EDIT = 'แก้ไข'; -
$action = Action::VIEW();// หรือด้วยไดนามิกคีย์:$action = Action::$key();// หรือด้วยค่าไดนามิก:$action = Action::from($value);/ / หรือ$การกระทำ = การกระทำใหม่($มูลค่า);
ดังที่คุณเห็นแล้วว่า มีการนำวิธีการคงที่ไปใช้โดยอัตโนมัติเพื่อให้เข้าถึงค่าแจงนับได้อย่างรวดเร็ว
ข้อดีอย่างหนึ่งเหนือการใช้ค่าคงที่คลาสคือสามารถใช้ enum เป็นประเภทพารามิเตอร์ได้:
ฟังก์ชั่น setAction (การกระทำ $ การกระทำ) {// ...}
__construct()
ตัวสร้างจะตรวจสอบว่ามีค่าอยู่ในแจงนับ
__toString()
คุณสามารถ echo $myValue
โดยจะแสดงค่า enum (ค่าของค่าคงที่)
getValue()
ส่งคืนค่าปัจจุบันของแจงนับ
getKey()
ส่งกลับคีย์ของค่าปัจจุบันบน Enum
equals()
ทดสอบว่าอินสแตนซ์ enum เท่ากันหรือไม่ (คืนค่า true
หากค่า enum เท่ากัน ถ้าเป็นอย่างอื่นจะ false
)
วิธีการคงที่:
from()
สร้างอินสแตนซ์ Enum โดยตรวจสอบว่ามีค่าอยู่ใน enum
วิธี toArray()
ส่งคืนค่าที่เป็นไปได้ทั้งหมดเป็นอาร์เรย์ (ชื่อคงที่ในคีย์ ค่าคงที่ในค่า)
keys()
ส่งคืนชื่อ (คีย์) ของค่าคงที่ทั้งหมดในคลาส Enum
values()
ส่งคืนอินสแตนซ์ของคลาส Enum ของค่าคงที่ Enum ทั้งหมด (ชื่อคงที่ในคีย์, อินสแตนซ์ Enum เป็นค่า)
isValid()
ตรวจสอบว่าค่าที่ทดสอบนั้นถูกต้องในชุดแจงนับหรือไม่
isValidKey()
ตรวจสอบว่าคีย์ที่ทดสอบนั้นถูกต้องกับชุดแจงนับหรือไม่
assertValidValue()
ยืนยันค่าที่ถูกต้องในชุดแจงนับ มิฉะนั้นจะส่งข้อยกเว้น
search()
คีย์ Return สำหรับค่าที่ค้นหา
คลาสสุดท้าย Action ขยาย Enum {private const VIEW = 'view';private const EDIT = 'แก้ไข'; }// วิธีการคงที่:$action = Action::VIEW();$action = Action::EDIT();
ตัวช่วยเมธอดแบบสแตติกถูกนำไปใช้โดยใช้ __callStatic()
หากคุณสนใจเกี่ยวกับการเติมข้อความอัตโนมัติของ IDE คุณสามารถใช้วิธีคงที่ได้ด้วยตัวเอง:
คลาสสุดท้าย Action ขยาย Enum {private const VIEW = 'view';/** * @return Action */public static function VIEW() {return new Action (self::VIEW); - -
หรือคุณสามารถใช้ phpdoc (ซึ่งรองรับใน PhpStorm เป็นต้น):
/** * @method static Action VIEW() * @method static Action EDIT() */final class การดำเนินการขยาย Enum {private const VIEW = 'view';private const EDIT = 'แก้ไข'; -
Native enum มาถึง PHP ในเวอร์ชัน 8.1: https://www.php.net/enumerations
หากโปรเจ็กต์ของคุณใช้งาน PHP 8.1+ หรือไลบรารีของคุณมีข้อกำหนดขั้นต่ำ คุณควรใช้แทนไลบรารีนี้
เมื่อย้ายจาก myclabs/php-enum
ความพยายามควรน้อยหากการใช้งานเป็นไปตามวิธีที่แนะนำ:
ค่าคงที่ส่วนตัว
ชั้นเรียนสุดท้าย
ไม่มีวิธีการแทนที่
การเปลี่ยนแปลงสำหรับการย้ายข้อมูล:
ควรเปลี่ยนคำจำกัดความของคลาสจาก
/** * @method static Action VIEW() * @method static Action EDIT() */final class การดำเนินการขยาย Enum {private const VIEW = 'view';private const EDIT = 'แก้ไข'; -
ถึง
การดำเนินการ enum: string {case VIEW = 'view'; case EDIT = 'edit'; -
ทุกสถานที่ที่ใช้คลาสเป็นประเภทจะยังคงทำงานต่อไป
ประเพณีและการเปลี่ยนแปลงที่จำเป็น:
การดำเนินการ | myclabs/php-enum.php? | enum ดั้งเดิม |
---|---|---|
การได้รับอินสแตนซ์จะเปลี่ยนจาก | $enumCase = Action::VIEW() | $enumCase = Action::VIEW |
สร้างแจงนับจากค่าที่สำรองไว้ | $enumCase = new Action('view') | $enumCase = Action::from('view') |
รับค่าที่สำรองไว้ของอินสแตนซ์ enum | $enumCase->getValue() | $enumCase->value |
เปรียบเทียบสองอินสแตนซ์แจงนับ | $enumCase1 == $enumCase2 หรือ $enumCase1->equals($enumCase2) | $enumCase1 === $enumCase2 |
รับคีย์/ชื่อของอินสแตนซ์แจงนับ | $enumCase->getKey() | $enumCase->name |
รับรายการอินสแตนซ์ที่เป็นไปได้ทั้งหมดของ enum | Action::values() | Action::cases() |
รับแผนที่ของอินสแตนซ์ที่เป็นไปได้ของแจงนับที่แมปตามชื่อ | Action::values() | array_combine(array_map(fn($case) => $case->name, Action::cases()), Action::cases()) หรือ (new ReflectionEnum(Action::class))->getConstants() |
รับรายชื่อที่เป็นไปได้ทั้งหมดของ enum | Action::keys() | array_map(fn($case) => $case->name, Action::cases()) |
รับรายการค่าสำรองที่เป็นไปได้ทั้งหมดของแจงนับ | Action::toArray() | array_map(fn($case) => $case->value, Action::cases()) |
รับแผนที่ของค่าที่ได้รับการสนับสนุนที่เป็นไปได้ของแจงนับที่แมปตามชื่อ | Action::toArray() | array_combine(array_map(fn($case) => $case->name, Action::cases()), array_map(fn($case) => $case->value, Action::cases())) หรือ array_map(fn($case) => $case->value, (new ReflectionEnum(Action::class))->getConstants())) |
PHP 8.1+ เนทีฟแจงนับ
การทำแผนที่หลักคำสอน
การรวม Symfony ParamConverter
บูรณาการ PHPStan