Skip to content

astandkaya/ex-enum

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ExEnum

Extend PHP Enum

<?php

use App\Libs\ExEnum\HasExtension;
use App\Libs\ExEnum\Extension;

enum Suit: string
{
    // このトレイトをuseする
    use HasExtension;

    #[Extension(
        label: 'ハート',
        tags: ['red'],
    )]
    case Hearts = 'hearts';

    #[Extension(
        label: 'ダイア',
        tags: ['red', 'not_hearts'],
    )]
    case Diamonds = 'diamonds';

    #[Extension(
        label: 'クラブ',
        tags: ['black', 'not_hearts'],
    )]
    case Clubs = 'clubs';

    #[Extension(
        label: 'スペード',
        tags: ['black', 'not_hearts'],
    )]
    case Spades = 'spades';
}

// nameからEnumを特定する
var_dump(Suit::fromName('Hearts'));
// enum(Suit::Hearts)

// nameからEnumを特定する(存在しないときはnullを返す)
var_dump(Suit::tryFromName('Hearts'));
// enum(Suit::Hearts)

// nameの一覧を取得する
var_dump(Suit::names());
// array(4) {
//   [0]=>
//   string(6) "Hearts"
//   [1]=>
//   string(8) "Diamonds"
//   [2]=>
//   string(5) "Clubs"
//   [3]=>
//   string(6) "Spades"
// }

// valueの一覧を取得する
var_dump(Suit::values());
// array(4) {
//   [0]=>
//   string(6) "hearts"
//   [1]=>
//   string(8) "diamonds"
//   [2]=>
//   string(5) "clubs"
//   [3]=>
//   string(6) "spades"
// }

// labelの一覧を取得する
var_dump(Suit::labels());
// array(4) {
//   [0]=>
//   string(9) "ハート"
//   [1]=>
//   string(9) "ダイア"
//   [2]=>
//   string(9) "クラブ"
//   [3]=>
//   string(12) "スペード"
// }

// not_heartsタグが付いたものだけ取得する
var_dump(Suit::casesOnly(['not_hearts']));
// array(3) {
//   [0]=>
//   enum(Suit::Diamonds)
//   [1]=>
//   enum(Suit::Clubs)
//   [2]=>
//   enum(Suit::Spades)
// }

// redタグが付いていないものだけ取得する
var_dump(Suit::casesExcept(['red']));
// array(2) {
//   [0]=>
//   enum(Suit::Clubs)
//   [1]=>
//   enum(Suit::Spades)
// }


$enum = Suit::Hearts;

// 設定したlabelを取得する
var_dump($enum->label());
// string(9) "ハート"

// EnumがHeartsであることを確認する
var_dump($enum->isHearts());
// bool(true)
var_dump($enum->isDiamonds());
// bool(false)

About

Extend PHP Enum

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages