ウェブ制作
バックエンド
Enumを使ってみる【PHP】

お刺身@プログラマー
2025.6.3
#Oookey_blog_015

こんにちは。
今回はPHPのEnumをLaravelで使ってみます。
ちなみにEnumの語源はenumeration(イニューマレイト)ですが、イーナムと呼ぶことが比較的多いそうです。
前置きはこれくらいに、Enumを実際に触っていきましょう。
1. Enumとは
Enumとは、「特定の限られた選択肢を定義できる型」のことです。
ユーザー種別・性別・学年などの定義済みである選択肢を使う場面で、安全性が高く使い勝手がいいです。
また、PHPにおけるEnumは2種類あります。
・値を持てないEnum = Pure Enum
・値を持てるEnum = Backed Enum
Pure Enum
Copied!
<?php
namespace App\Enums;
enum PayBackPoints
{
case Bronze;
case Silver;
case Gold;
}
Backed Enum
Copied!
<?php
namespace App\Enums;
enum PayBackPoints: string
{
case Bronze = 'bronzeだよ';
case Silver = 'silverだよ';
case Gold = 'goldだよ';
}
基本的にLaravelではBacked Enumを使っていきます。
Backed Enumには制約があります。
・integer or stringのみ
・重複不可(ユニーク)
・単一の型のみ
Backed Enumでそれぞれの値とキーを取り出すには下記のようになります。
Copied!
<?php
// キーを取り出す
echo PayBackPoints::Bronze->name;
// 表示:Bronze
// 値を取り出す
echo PayBackPoints::Bronze->value;
// 表示:bronzeだよ
2. 実装例
ここでは会員ランクごとのポイント返還率を設定していきます。
Enumsを作成
app/Enums/PayBackPoints.phpを作成し、下記のようにcase(選択肢)設定を行います。
Copied!
<?php
namespace App\Enums;
enum PayBackPoints: string
{
case Bronze = 'bronze';
case Silver = 'silver';
case Gold = 'gold';
}
型指定はstring。
それぞれのキーと値を設定しています。
次にEnumにランクごとのポイント還元率の関数を実装します。
Copied!
<?php
namespace App\Enums;
enum PayBackPoints: string
{
case Bronze = 'bronze';
case Silver = 'silver';
case Gold = 'gold';
public function MembersRankPoint(): float
{
return match ($this) {
self::Bronze => 0.01,
self::Silver => 0.05,
self::Gold => 0.1,
};
}
}
Casts設定
次にmodelでCasts設定を行います。
Copied!
<?php
use APP\Enums\PayBackPoints;
class User
{
protected $casts = [
'member_rank' => PayBackPoints::class,
];
}
これで自動変換できるようになりました。
Selcetboxでリスト表示
controller
Copied!
<?php
public function index(): view
{
// 会員ランクの一覧表示
$member_ranks = PayBackPoints::cases();
return view('test', ['member_ranks' => $member_ranks]);
}
cases()はcaseをすべて取得します。
view
Copied!
<?php
<select name="memberRank">
@foreach($member_ranks as $rank)
<option value="{{ $rank }}">{{ $rank }}</option>
@endforeach
</select>
表示結果イメージ

テーブル情報を元に表示
controller
Copied!
<?php
public function index(): view
{
// ユーザーの会員ランクとポイント還元率
$user = User::find(1);
$userRank = $user->member_rank->name;
$userPoint = $user->member_rank->MembersRankPoint();
return view('test', ['userRank' => $userRank, 'userPoint' => $userPoint]);
}
view
Copied!
<p>あなたの会員は{{ $userRank }}です。ポイント還元率{{ $userPoint }}になります</p>

※member_rankカラムの値はgoldで進めています。
まとめ
PHPのEnumをLaravelで扱ってみましたがいかがでしたでしょうか。
今までconfig勢だった自分にとってはかなり扱いが楽になるようになりました。
紹介しきれませんでしたが、Enumには定数値の有無チェックのtry, tryFromなどのメソッドが
用意されていたり、インターフェースでの実装なども可能です。
いずれはインターフェースとEnumを併せた実装をご紹介できればと思います。
それではまた。