TechnicianAuthStatus.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <?php
  2. namespace App\Enums;
  3. /**
  4. * 技师认证状态枚举类
  5. */
  6. enum TechnicianAuthStatus: int
  7. {
  8. /**
  9. * 认证状态:审核中
  10. */
  11. case AUDITING = 1;
  12. /**
  13. * 认证状态:审核通过
  14. */
  15. case PASSED = 2;
  16. /**
  17. * 认证状态:审核拒绝
  18. */
  19. case REJECTED = 3;
  20. /**
  21. * 获取状态的显示文本
  22. *
  23. * @return string 状态的中文描述
  24. */
  25. public function label(): string
  26. {
  27. return match ($this) {
  28. self::AUDITING => '审核中',
  29. self::PASSED => '审核通过',
  30. self::REJECTED => '审核拒绝',
  31. };
  32. }
  33. /**
  34. * 获取状态的整数值
  35. *
  36. * @return int 状态值
  37. */
  38. public function value(): int
  39. {
  40. return $this->value;
  41. }
  42. /**
  43. * 检查当前状态是否与指定状态相同
  44. *
  45. * @param self $status 要比较的状态
  46. * @return bool 如果状态相同返回 true,否则返回 false
  47. */
  48. public function is(self $status): bool
  49. {
  50. return $this === $status;
  51. }
  52. /**
  53. * 根据整数值创建对应的状态枚举实例
  54. *
  55. * @param int $value 状态值
  56. * @return self|null 返回对应的状态枚举实例,如果值无效则返回 null
  57. */
  58. public static function fromValue(int $value): ?self
  59. {
  60. if (!is_int($value)) {
  61. return null;
  62. }
  63. return match ($value) {
  64. self::AUDITING->value => self::AUDITING,
  65. self::PASSED->value => self::PASSED,
  66. self::REJECTED->value => self::REJECTED,
  67. default => null
  68. };
  69. }
  70. /**
  71. * 获取所有状态的值数组
  72. *
  73. * @return array 包含所有状态值的数组
  74. */
  75. public static function values(): array
  76. {
  77. return array_column(self::cases(), 'value');
  78. }
  79. /**
  80. * 获取所有状态的键值对数组
  81. *
  82. * @return array 状态值作为键,显示文本作为值的关联数组
  83. */
  84. public static function all(): array
  85. {
  86. return [
  87. self::AUDITING->value => self::AUDITING->label(),
  88. self::PASSED->value => self::PASSED->label(),
  89. self::REJECTED->value => self::REJECTED->label(),
  90. ];
  91. }
  92. }