CommentStatus.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. <?php
  2. namespace App\Enums;
  3. /**
  4. * 评论状态枚举类
  5. */
  6. enum CommentStatus: int
  7. {
  8. /**
  9. * 评论状态:待评论
  10. */
  11. case PENDING = 1;
  12. /**
  13. * 评论状态:已评论
  14. */
  15. case COMMENTED = 2;
  16. /**
  17. * 获取状态的显示文本
  18. *
  19. * @return string 状态的中文描述
  20. */
  21. public function label(): string
  22. {
  23. return match ($this) {
  24. self::PENDING => '待评论',
  25. self::COMMENTED => '已评论',
  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 $status 要比较的状态
  41. * @return bool 如果状态相同返回 true,否则返回 false
  42. */
  43. public function is(self $status): bool
  44. {
  45. return $this === $status;
  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::PENDING->value => self::PENDING,
  57. self::COMMENTED->value => self::COMMENTED,
  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::PENDING->value => self::PENDING->label(),
  79. self::COMMENTED->value => self::COMMENTED->label(),
  80. ];
  81. }
  82. /**
  83. * 将枚举转换为字符串
  84. *
  85. * 使用示例:
  86. * $status = CommentStatus::PENDING;
  87. *
  88. * // 与字符串比较
  89. * if ($status == '1') { // 可以直接与字符串比较
  90. * // do something
  91. * }
  92. *
  93. * // 与数字比较
  94. * if ($status == 1) { // 可以直接与数字比较
  95. * // do something
  96. * }
  97. *
  98. * echo $status; // 输出 "1"
  99. * $str = (string)$status; // 显式转换为字符串 "1"
  100. * $num = (int)$status; // 显式转换为数字 1
  101. *
  102. * @return string 返回枚举的值的字符串形式
  103. */
  104. public function __toString(): string
  105. {
  106. return (string) $this->value;
  107. }
  108. }