PHPackages                             k2gl/enum - 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. k2gl/enum

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

k2gl/enum
=========

PHP BackedEnum spiced with syntactic sugar

2.4.0(2d ago)33981MITPHPPHP &gt;=8.1CI passing

Since Mar 12Pushed 2d ago1 watchersCompare

[ Source](https://github.com/k2gl/enum)[ Packagist](https://packagist.org/packages/k2gl/enum)[ Docs](https://github.com/k2gl/enum)[ RSS](/packages/k2gl-enum/feed)WikiDiscussions main Synced today

READMEChangelog (3)Dependencies (9)Versions (12)Used By (1)

PHP BackedEnum spiced with syntactic sugar.
===========================================

[](#php-backedenum-spiced-with-syntactic-sugar)

[![CI](https://camo.githubusercontent.com/6eaf12c50d2d2824da732191a232e7c4cc14d9d2358c84fc76498fdae1ebba43/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6b32676c2f656e756d2f63692e796d6c3f6272616e63683d6d61696e266c6162656c3d4349266c6f676f3d676974687562)](https://github.com/k2gl/enum/actions/workflows/ci.yml)[![Latest Stable Version](https://camo.githubusercontent.com/00226b105e1ae196586632c7dc814d62bc63571e2e021a3109eb890e21cab4fe/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6b32676c2f656e756d3f6c6f676f3d7061636b6167697374266c6f676f436f6c6f723d7768697465)](https://packagist.org/packages/k2gl/enum)[![Total Downloads](https://camo.githubusercontent.com/8a30110d1c89ce819565db5515f72037cd6ed13982e73492989b00a944806488/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6b32676c2f656e756d3f6c6f676f3d7061636b6167697374266c6f676f436f6c6f723d7768697465)](https://packagist.org/packages/k2gl/enum)[![PHPStan Level](https://camo.githubusercontent.com/01c58e66f2fafb70c17613ff2b1da3f549aade3a735b076da5cd9e5c04b945a5/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048505374616e2d6c6576656c253230392d3261356561373f6c6f676f3d706870266c6f676f436f6c6f723d7768697465)](https://phpstan.org)[![License](https://camo.githubusercontent.com/d53d5824728b47f25fb8cdb6a8b6a44c6c21aff335ecec291e9a2d39ae17816c/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f6b32676c2f656e756d3f636f6c6f723d79656c6c6f77677265656e)](https://packagist.org/packages/k2gl/enum)

Installation
------------

[](#installation)

You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/):

```
composer require k2gl/enum

```

Usage
-----

[](#usage)

```
use K2gl\Enum\ExtendedBackedEnum;
use K2gl\Enum\ExtendedBackedEnumInterface;

enum CardSuit: string implements ExtendedBackedEnumInterface
{
    use ExtendedBackedEnum;

    case HEARTS = 'hearts';
    case DIAMONDS = 'diamonds';
    case CLUBS = 'clubs';
    case SPADES = 'spades';
}

enum ResponseCode: int implements ExtendedBackedEnumInterface
{
    use ExtendedBackedEnum;

    case HTTP_OK = 200;
    case HTTP_I_AM_A_TEAPOT = 418;
}

$suit = CardSuit::any(); // random CardSuit
$suit = CardSuit::anyoneExcept(CardSuit::CLUBS); // random CardSuit except 'clubs'
$suit = CardSuit::anyoneExcept([CardSuit::HEARTS, CardSuit::DIAMONDS]); // random CardSuit except 'hearts' and 'diamonds'

$suit = CardSuit::SPADES;
$suit->is(CardSuit::SPADES); // true
$suit->is('spades'); // true
$suit->is(CardSuit::HEARTS); // false

$suit = ResponseCode::HTTP_I_AM_A_TEAPOT;
$suit->isNot(200); // true
$suit->isNot(ResponseCode::HTTP_OK); // true
$suit->isNot(418); // false
$suit->isNot(ResponseCode::HTTP_I_AM_A_TEAPOT); // false

// Set membership — is()/isNot() for a list of cases or raw values.
$suit = CardSuit::SPADES;
$suit->in(CardSuit::HEARTS, CardSuit::SPADES); // true
$suit->in('hearts', 'clubs');                  // false
$suit->in(...[CardSuit::HEARTS, CardSuit::SPADES]); // true (spread an array)
$suit->notIn(CardSuit::HEARTS, CardSuit::CLUBS);    // true

CardSuit::names(); // ['HEARTS', 'DIAMONDS', 'CLUBS', 'SPADES']
CardSuit::values(); // ['hearts', 'diamonds', 'clubs', 'spades']

// Resolve a case by its name — the counterpart of the native from()/tryFrom(),
// which only resolve by backing value.
CardSuit::fromName('SPADES');    // CardSuit::SPADES
CardSuit::tryFromName('SPADES'); // CardSuit::SPADES
CardSuit::tryFromName('joker');  // null
CardSuit::fromName('joker');     // throws \ValueError
```

### Labels and form options

[](#labels-and-form-options)

Attach a human-readable label to a case with `#[Label]`. `label()` returns it, falling back to the raw case name when the attribute is absent; `options()`builds a `value => label` map ready for a dropdown; `labels()` lists every label; and `fromLabel()`/`tryFromLabel()` resolve a case back from its label.

```
use K2gl\Enum\ExtendedBackedEnum;
use K2gl\Enum\ExtendedBackedEnumInterface;
use K2gl\Enum\Label;

enum OrderStatus: string implements ExtendedBackedEnumInterface
{
    use ExtendedBackedEnum;

    #[Label('Awaiting payment')]
    case PENDING = 'pending';

    #[Label('Paid')]
    case PAID = 'paid';

    case SHIPPED = 'shipped'; // no #[Label] — label() falls back to the name
}

OrderStatus::PENDING->label(); // 'Awaiting payment'
OrderStatus::SHIPPED->label(); // 'SHIPPED'

OrderStatus::options();
// ['pending' => 'Awaiting payment', 'paid' => 'Paid', 'shipped' => 'SHIPPED']

// Render an HTML :
foreach (OrderStatus::options() as $value => $label) {
    echo "{$label}";
}

// Symfony ChoiceType expects label => value, so flip it:
// 'choices' => array_flip(OrderStatus::options())

OrderStatus::labels();
// ['Awaiting payment', 'Paid', 'SHIPPED']

// Reverse of label() — resolve a case from a (form-submitted) label:
OrderStatus::fromLabel('Awaiting payment'); // OrderStatus::PENDING
OrderStatus::tryFromLabel('Paid');          // OrderStatus::PAID
OrderStatus::tryFromLabel('Refunded');      // null
OrderStatus::fromLabel('Refunded');         // throws \ValueError
```

Pull requests are always welcome
--------------------------------

[](#pull-requests-are-always-welcome)

[Collaborate with pull requests](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request)

###  Health Score

50

—

FairBetter than 95% of packages

Maintenance98

Actively maintained with recent releases

Popularity21

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity61

Established project with proven stability

 Bus Factor1

Top contributor holds 92.9% 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 ~120 days

Recently: every ~8 days

Total

11

Last Release

2d ago

Major Versions

1.0.3 → 2.0.02023-10-08

### Community

Maintainers

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

---

Top Contributors

[![k2gl](https://avatars.githubusercontent.com/u/2846079?v=4)](https://github.com/k2gl "k2gl (26 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (2 commits)")

---

Tags

phpenumbackedEnum

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/k2gl-enum/health.svg)

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

###  Alternatives

[kongulov/interact-with-enum

Trait for convenient use of ENUM in PHP

3061.4k2](/packages/kongulov-interact-with-enum)[iteks/laravel-enum

A comprehensive Laravel package providing enhanced enum functionalities, including attribute handling, select array conversions, and fluent facade interactions for robust enum management in Laravel applications.

2518.6k](/packages/iteks-laravel-enum)[ducks-project/spl-types

Polyfill Module for SplType PHP extension. This extension aims at helping people making PHP a stronger typed language and can be a good alternative to scalar type hinting. It provides different typehandling classes as such as integer, float, bool, enum and string

1033.1k](/packages/ducks-project-spl-types)

PHPackages © 2026

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