PHP8.1からenumが使えるようになります
PHP8.1は2021年11月25日リリース予定です。
追加される新機能は以下を参考
https://stitcher.io/blog/new-in-php-81
その中で注目の一つはenumが追加されることかなと思います。
実際にどんな感じに使えるのか?
enumの宣言
まずは以下のようにenumを宣言します。
enum Status
{
case DRAFT;
case PUBLISHED;
case ARCHIVED;
}
宣言したenumを利用する
以下のようにコンストラクターでenumを引数として利用します。
class BlogPost
{
public function __construct(
public Status $status,
) {}
}
先ほど作成したBlogPostのインスタンスを作成します。
この際に、作成したenumのStatusを引数として与えます。
Status::DRAFT
のように記述します。
$post = new BlogPost(Status::DRAFT);
enumでメソッドを定義する
enumでは、classを同じようにメソッドも定義できます。
今回はcolor()
というメソッドを作成して、enumとマッチしたものを指定した文字列として返します。
enum Status
{
case DRAFT;
case PUBLISHED;
case ARCHIVED;
public function color(): string
{
return match($this)
{
Status::DRAFT => 'grey',
Status::PUBLISHED => 'green',
Status::ARCHIVED => 'red',
};
}
}
定義したメソッドは以下のように利用します。
この場合、'red'が返却値となります。
$status = Status::ARCHIVED;
$status->color(); // 'red'
interfacesの実装
enumはclassと同じようにinterfacesの実装をすることも可能です。
以下のようにHasColorというinterfacesが定義されていたとします。
interface HasColor
{
public function color(): string;
}
その際には、classと同様にimplementsで実装することができます。
enum Status implements HasColor
{
case DRAFT;
case PUBLISHED;
case ARCHIVED;
public function color(): string { /* … */ }
}
PHP8.1ではenumの追加以外にも魅力的なアップデートが多そうです。
参考