josézenem/ php-enums-extended
PHP 8.1 Enums Extended 在使用 PHP 8.1+ 枚举时增加了额外的功能。
3.1.0
2022-03-18 18:08 UTC
Requires
- php: ^8.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.0
- pestphp/pest: ^1.20
README
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
变更日志
有关最近更改的更多信息,请参阅 变更日志。
贡献
有关详细信息,请参阅 贡献指南。
安全漏洞
有关报告安全漏洞的详细信息,请参阅 我们的安全策略。
鸣谢
- Jose Jimenez
- 所有贡献者
- 特别感谢 Shocm 推动我完成这个项目,并回复我的迟来的回复。
许可协议
MIT 许可协议 (MIT)。有关更多信息,请参阅 许可文件。