PHPackages                             lishun/enums - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. lishun/enums

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

lishun/enums
============

php8.1 enums tools

2.0.2(1y ago)155861[1 issues](https://github.com/lishuncoder/enums/issues)MITPHPPHP &gt;=8.1

Since Apr 28Pushed 1y ago1 watchersCompare

[ Source](https://github.com/lishuncoder/enums)[ Packagist](https://packagist.org/packages/lishun/enums)[ RSS](/packages/lishun-enums/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (9)Used By (0)

安装
==

[](#安装)

```
composer require lishun/enums
```

简述
==

[](#简述)

提供两种枚举的应用，一种是对常规枚举类的加强和扩展，即枚举类扩展，继承原枚举类原生功能的基础上拓展了注解属性，出发点源自于一些枚举的值确实一致但意义却不一样的场景：

```
tb_user.gender:
0 未知
1 男
2 女

tb_user.type:
0 普通
1 特殊类型1
2 特殊类型2
```

此时值确实一致，但需要的解释和描述却完全不一致，这是通过 const 常量的注解已经无法实现这个功能，或者只能将原 const 值 变为数组，这并不优雅，这时通过对无值枚举类的注解，可以实现值一致，并且附带其余解释和分组与多重分组功能。

另一种是对业务中常见的错误码进行收纳和管理，并且提供前缀功能。让错误码几乎不可能出现重复，并且抛出时变的更加简单。

枚举类扩展
=====

[](#枚举类扩展)

```
use Lishun\Enums\Annotations\EnumCase;
use Lishun\Enums\Interfaces\EnumCaseInterface;
use Lishun\Enums\Traits\EnumCaseGet;

/**
 * @method getTest()
 */
enum DemoEnum implements EnumCaseInterface
{
    use EnumCaseGet;

    #[EnumCase(msg: '系统错误', data: 1, group: 'sys', ext: ['test'=>1,'type'=>2])]
    case SYSTEM_ERROR;

    #[EnumCase(msg: '系统错误2', data: 2, group: ['sys', 'sys2'])]
    case SYSTEM_ERROR2;

    #[EnumCase('系统错误3', 2)]
    case SYSTEM_ERROR3;
}
```

枚举函数
----

[](#枚举函数)

### 获取枚举解释信息

[](#获取枚举解释信息)

```
// 获取解释信息
DemoEnum::SYSTEM_ERROR->getMsg(); // msg:系统错误
```

### 获取枚举拓展数据

[](#获取枚举拓展数据)

```
// 获取枚举拓展数据
DemoEnum::SYSTEM_ERROR->getExt(); // ext: ['test'=>1,'type'=>2]
```

#### 获取枚举拓展数据的某个值

[](#获取枚举拓展数据的某个值)

```
// 获取枚举拓展数据的某个值
DemoEnum::SYSTEM_ERROR->getExt('test'); // 1

// 这个方法需要你在原类上加上注释 @method getTest()
DemoEnum::SYSTEM_ERROR->getTest(); // 1

// 这个方法需要你在原类上加上注释 @method test()
DemoEnum::SYSTEM_ERROR->test(); // 1
```

### 获取枚举注解数据

[](#获取枚举注解数据)

```
// 获取枚举注解数据
DemoEnum::SYSTEM_ERROR->getData();
```

### 获取枚举分组名

[](#获取枚举分组名)

```
// 获取枚举附属数据
DemoEnum::SYSTEM_ERROR->getGroup();
```

### 获取枚举的分组数据

[](#获取枚举的分组数据)

```
// 获取枚举分组，将返回一个数组，如果传入值为单个的情况仅返回单个分组，传入值为数组的情况下会返回以分组名为key的多维数组
DemoEnum::getGroupEnums('sys');
DemoEnum::getGroupEnums(['sys','sys2']);
DemoEnum::getGroupEnums(DemoEnum::SYSTEM_ERROR->getGroup())

//数据结构如下：
DemoEnum::getGroupEnums('sys');
{
    "SYSTEM_ERROR": {
        "name": "SYSTEM_ERROR",
        "value": null,
        "msg": "系统错误",
        "data": 1,
        "group": "sys",
        "ext": [
            1,
            2,
            3
        ]
    },
    "SYSTEM_ERROR2": {
        "name": "SYSTEM_ERROR2",
        "value": null,
        "msg": "系统错误2",
        "data": 2,
        "group": [
            "sys",
            "sys2"
        ],
        "ext": null
    }
}

DemoEnum::getGroupEnums(['sys','sys2']);
 "SYSTEM_ERROR": {
        "name": "SYSTEM_ERROR",
        "value": null,
        "msg": "系统错误",
        "data": 1,
        "group": "sys",
        "ext": [
            1,
            2,
            3
        ]
    },
"SYSTEM_ERROR2": {
    "name": "SYSTEM_ERROR2",
    "value": null,
    "msg": "系统错误2",
    "data": 2,
    "group": [
        "sys",
        "sys2"
    ],
    "ext": null
},
 "SYSTEM_ERROR2": {
    "name": "SYSTEM_ERROR2",
    "value": null,
    "msg": "系统错误2",
    "data": 2,
    "group": [
        "sys",
        "sys2"
    ],
    "ext": null
}

```

### 将枚举转换为数组

[](#将枚举转换为数组)

```
// 将枚举转换为数组
DemoEnum::SYSTEM_ERROR2->toArray();
{
    "name": "SYSTEM_ERROR2",
    "value": null,
    "msg": "系统错误2",
    "data": 2,
    "group": [
        "sys",
        "sys2"
    ],
    "ext": null
}
```

错误码
---

[](#错误码)

```
use Lishun\Enums\Annotations\EnumCode;
use Lishun\Enums\Annotations\EnumCodePrefix;
use Lishun\Enums\Interfaces\EnumCodeInterface;
use Lishun\Enums\Traits\EnumCodeGet;

#[EnumCodePrefix(10, '系统错误码')]
enum DemoCode: int implements EnumCodeInterface
{
    use EnumCodeGet;

    // 错误码: 10500, 错误信息: 系统错误
    #[EnumCode('系统错误')]
    case SYSTEM_ERROR = 500;

    #[EnumCode(msg:'系统错误1')]
    case SYSTEM_ERROR1 = 501;

     #[EnumCode(msg:'系统错误2',ext:['test'=1])]
    case SYSTEM_ERROR2 = 502;
}
```

### 获取错误码

[](#获取错误码)

```
// 获取错误码
DemoCode::SYSTEM_ERROR->getCode(); // 10500
```

### 获取错误码解释

[](#获取错误码解释)

```
// 获取错误码解释
DemoCode::SYSTEM_ERROR->getMsg(); // 系统错误
```

### 获取错误码前缀

[](#获取错误码前缀)

```
// 获取错误码前缀
DemoCode::SYSTEM_ERROR->getPrefixCode(); // 10
```

### 获取错误码前缀注释

[](#获取错误码前缀注释)

```
// 获取错误码前缀注释
DemoCode::SYSTEM_ERROR->getPrefixMsg(); // 系统错误码
```

### 获取枚举拓展数据的某个值

[](#获取枚举拓展数据的某个值-1)

```
// 获取枚举拓展数据的某个值
DemoCode::SYSTEM_ERROR->getExt('test'); // 1

// 这个方法需要你在原类上加上注释 @method getTest()
DemoCode::SYSTEM_ERROR->getTest(); // 1

// 这个方法需要你在原类上加上注释 @method test()
DemoCode::SYSTEM_ERROR->test(); // 1
```

### 将错误码转换为数组

[](#将错误码转换为数组)

```
// 将枚举转换为数组
DemoEnum::SYSTEM_ERROR2->toArray();
{
    "name": "SYSTEM_ERROR",
    "value": 500,
    "msg": "系统错误",
    "code": 10500,
    "ext": null,
    "pre": {
        "prefixCode": 10,
        "prefixMsg": "系统错误码"
    }
}
```

### 抛出错误码时

[](#抛出错误码时)

```
// 将枚举转换为数组
throw new BusinessException(DemoCode::SYSTEM_ERROR);

// 通过接口判断是否为code的实现类
class BusinessException extends ServerException
{
    public function __construct(mixed $message = null,mixed $code = 0, Throwable $previous = null)
    {
        if ($message instanceof EnumCodeInterface) {
            $msg = $message->getMsg();
            $code = $message->getCode();
            parent::__construct($msg, $code, $previous);
        }else{
            parent::__construct($message, $code, $previous);
        }
    }
}
```

鸣谢
==

[](#鸣谢)

- 参照了朋友杰哥的包：
- 参照的开源包：

###  Health Score

35

—

LowBetter than 79% of packages

Maintenance39

Infrequent updates — may be unmaintained

Popularity21

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity58

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~87 days

Recently: every ~102 days

Total

8

Last Release

493d ago

Major Versions

1.0.14 → 2.0.02023-12-13

### Community

Maintainers

![](https://www.gravatar.com/avatar/6b8608a54b74da3702192dec854f925d81f71b88423852561438247257d3123d?d=identicon)[411906015](/maintainers/411906015)

---

Top Contributors

[![lishuncoder](https://avatars.githubusercontent.com/u/35674916?v=4)](https://github.com/lishuncoder "lishuncoder (31 commits)")

---

Tags

enumlibraryenumerationphp81

### Embed Badge

![Health badge](/badges/lishun-enums/health.svg)

```
[![Health](https://phpackages.com/badges/lishun-enums/health.svg)](https://phpackages.com/packages/lishun-enums)
```

###  Alternatives

[marc-mabe/php-enum

Simple and fast implementation of enumerations with native PHP

49444.8M97](/packages/marc-mabe-php-enum)[rexlabs/enum

Enumeration (enum) implementation for PHP

48482.2k2](/packages/rexlabs-enum)[cerbero/enum

Zero-dependencies package to supercharge enum functionalities.

359207.5k2](/packages/cerbero-enum)[cerbero/laravel-enum

Laravel package to supercharge enum functionalities.

18989.6k](/packages/cerbero-laravel-enum)[emreyarligan/enum-concern

A PHP package for effortless Enumeration handling with Laravel Collections 📦 ✨

21156.3k1](/packages/emreyarligan-enum-concern)[thunderer/platenum

PHP enum library

36145.7k](/packages/thunderer-platenum)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
