TransactionDirection.php 1.9 KB

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