azimkordpour / power-enum
这个轻量级包为您的 Enum 类提供了一些方法,以充分发挥其作用。
v1.1.0
2023-08-17 17:32 UTC
Requires
- php: ^8.1
Requires (Dev)
- pestphp/pest: ^2.8
README
这个轻量级包提供了一个 Trait
,允许您在 PHP 项目中充分利用 Enum 类,尤其是在现代 PHP 框架如 Laravel
中。
安装
注意:由于 Enum 是在 PHP 8.1 中引入的,此包需要最低 PHP 版本为 8.1。
您可以通过 composer 安装此包
composer require azimkordpour/power-enum
使用说明
要在您的 Enum 类中使用 PowerEnum
特性,只需像这样导入即可
<?php use AzimKordpour\PowerEnum\Traits\PowerEnum; enum PostStatus: string { use PowerEnum; case Active = 'active'; case Inactive = 'inactive'; }
现在,让我们更详细地看看这些方法。
在 Laravel 中
<?php namespace App\Models; use App\Enums\PostStatus; use Illuminate\Database\Eloquent\Model; class Post extends Model { /** * The attributes that should be cast. * * @var array */ protected $casts = [ 'status' => PostStatus::class, ]; }
然后,您可以使用以下示例。
检查模型的状态是否为 active
$post = Post::find(1); // The status is active. $post->status->isActive();
返回布尔值
true
检查模型的状态是否等于给定的值
$post = Post::find(1); // The status is active. $post->status->equals('inactive');
返回布尔值
false
此方法与 equals
的工作方式相同
$post = Post::find(1); // The status is active. $post->status->is('inactive');
返回布尔值
false
获取状态的标签
$post = Post::find(1); // The status is active. $post->status->label();
如果没有设置标签,则返回 case 的值
"active"
有关设置自定义标签和查看 PHP 项目中所有方法的详细信息,请参阅下一节。
所有方法
静态获取 PostStatus
的值
PostStatus::values();
返回一个数组
[ 'active', 'inactive' ]
静态获取 PostStatus
的名称
PostStatus::names();
返回一个数组
[ 'Active', 'Inactive' ]
静态获取 PostStatus
的名称和值
PostStatus::list();
返回一个数组
[ 'Active' => 'active', 'Inactive' => 'inactive' ]
检查 case 是否是活动 case
PostStatus::from('active')->isActive();
返回布尔值
true
检查 case 是否等于给定的值
PostStatus::Active->equals('inactive');
返回布尔值
false
此方法与 equals
的工作方式相同
PostStatus::Active->is('inactive');
返回布尔值
false
从名称初始化类
PostStatus::fromName('Active');
返回 Enum 对象
PostStatus::Active
获取 case 的标签
PostStatus::Active->label();
如果没有设置标签,则返回 case 的值
"active"
获取 case 的标签
PostStatus::Active->getLabels();
如果没有设置标签,则返回 case 的值
[ 'active' => 'active', 'inactive' => 'inactive' ]
您可以在 Enum 类中为 case 编写自定义标签
/** * Set the labels of all the cases. */ public static function setLabels(): array { return [ self::Active->value => 'published post', self::Inactive->value => 'draft post', ]; }
然后,label
方法的用法
PostStatus::Active->label();
返回
"published post"
和 getLabels
方法的用法
PostStatus::Active->getLables();
返回
[ 'active' => 'published post', 'inactive' => 'draft post' ]
测试
composer test