josézenem/php-enums-extended

PHP 8.1 Enums Extended 在使用 PHP 8.1+ 枚举时增加了额外的功能。

3.1.0 2022-03-18 18:08 UTC

This package is auto-updated.

Last update: 2024-09-08 07:17:21 UTC


README

Latest Stable Version Tests Codacy Badge Total Downloads PHP Version Require

PHP 8.1 Enums Extended 允许您使用额外的方法来使用 PHP 8.1 枚举。

enum StatusEnum:int
{
    case Closed = 0;
    case Open = 1;
    case PENDING_APPROVAL = 2;
}

// Given a new Blog() that uses the enum trait, you can do things like:
$blog->status->isOpen() // Will return boolean
$blog->status->equals(StatusEnum::Open, StatusEnum::Closed)

// Normalization happens in the background allowing these scenarios 
$blog->status->isPendingApproval();
$blog->status->isPENDING_APPROVAL();

StatusEnum::Open() // Will return ->value, vs doing StatusEnum::Open->value
StatusEnum::PendingApproval()
StatusEnum::PENDING_APPROVAL()

安装

您可以通过 composer 安装此包。

composer require josezenem/php-enums-extended

用法

可用方法

可用静态方法

equals()

传入一个或多个枚举实例,如果匹配则返回布尔值。

$blog->status->equals(StatusEnum::Closed, StatusEnum::Draft);

doesNotEqual()

传入一个或多个枚举实例,如果不匹配则返回布尔值。

$blog->status->doesNotEqual(StatusEnum::Closed, StatusEnum::Draft);

isCall**()

如果当前值匹配所需的实例,则返回布尔值。带下划线的方法可以通过驼峰命名法访问,以及它们的常规名称。

$blog->status->isDraft();

// Given StatusEnum::OPEN_ISSUE = 4;
// the following is acceptable.
$blog->status->isOpenIssue();
$blog->status->isOPEN_ISSUE();

options()

将返回一个 $val => $key 的数组。

$options = self::options()

// returns
$options = [
    'open' => 'Open',
    'closed' => 'Closed',
    'draft' => 'Draft',
]

optionsFlipped()

将返回一个 $key => $val 的数组。

$options = self::optionsFlipped()

// returns
$options = [
    'Open' => 'open',
    'Closed' => 'closed',
    'Draft' => 'draft',
]

names()

将返回一个只包含名称的数组。

$options = self::names()

// returns
$options = [
    'Open' => 'Open',
    'Closed' => 'Closed',
    'Draft' => 'Draft',
]

hasName()

传入变量并确认名称是否对枚举有效。

App\MyEnums\Type::hasName('Closed');
// Returns true

App\MyEnums\Type::hasName('close');
// Returns false

values()

将返回一个只包含值的数组。

$options = self::values()

// returns
$options = [
    'open' => 'open',
    'closed' => 'closed',
    'draft' => 'draft',
]

hasValue()

传入变量并确认值是否对枚举有效。

App\MyEnums\Type::hasValue('closed');
// Returns true

App\MyEnums\Type::hasValue('not a valid value for the enum');
// Returns false

call**()

将允许您通过静态调用获取字段值。

// Consider the following scenario, to get the value you would do:
// StatusEnum::Open->value
enum StatusEnum:int
{
    case Closed = 0;
    case Open = 1;
    case Draft = 2;
}

// You can instead get value directy by calling it statically
// Case Insensitive
StatusEnum::OPEN()
StatusEnum::Open()

异常处理

当使用魔法方法时,如果不存在方法调用,系统将抛出异常。

Josezenem\PhpEnumsExtended\Exceptions\EnumsExtendedException
// StatusEnum.php
// StatusEnum:int is used for the example, but supports :string and default of just StatusEnum
use Josezenem\PhpEnumsExtended\Traits\PhpEnumsExtendedTrait;

enum StatusEnum:int
{
    use PhpEnumsExtendedTrait;

    case Closed = 0;
    case Open = 1;
    case Draft = 2;
}

// Blog.php
class Blog
{
    public function __construct(
        public StatusEnum $status = StatusEnum::Open,
    ) {
    }
}



// Usage
$blog = new Blog();


// ->equals()
$blog->status->equals(StatusEnum::Open); // will return true if it matches
$blog->status->equals(StatusEnum::Closed, StatusEnum::Open); // Pass any number of params, will return true if it matches any of the parameters

// ->doesNotEqual()
$blog->status->doesNotEqual(StatusEnum::Closed); // will return true if it does not match
$blog->status->doesNotEqual(StatusEnum::Closed, StatusEnum::Draft)  // Pass any number of params, will return true if it does not match any of the parameters

// ->is** magic method
// the magic method takes camelCase allowing you to do boolean check against any field.
$blog->status->isOpen() // will return true or false

// ::options()
$options = StatusEnum::options();

// will output
//$options = [
//    0 => 'Closed',
//    1 => 'Open',
//    2 => 'Closed',
//];

// ::optionsFlipped()
$options = StatusEnum::optionsFlipped();

// will output
//$options = [
//    'Closed' => 0,
//    'Open' => 1,
//    'Closed' => 2,
//];

测试

composer test

变更日志

有关最近更改的更多信息,请参阅 变更日志

贡献

有关详细信息,请参阅 贡献指南

安全漏洞

有关报告安全漏洞的详细信息,请参阅 我们的安全策略

鸣谢

许可协议

MIT 许可协议 (MIT)。有关更多信息,请参阅 许可文件