--- title: 'laravel 11 以及 較低版本 PHP 的枚舉(ENUM)' tags: '開發學習筆記' --- laravel 11 以及 較低版本 PHP 的枚舉(ENUM) === [TOC] NEW laravel 11 版推出了,針對 PHP 8.1 以上 Enum 的支援 --- :::info 版本需求: PHP 8.2 官方文章: https://laravel.com/docs/11.x/routing#implicit-enum-binding 文件夾路徑: App\Enums ::: ### laravel 指令 ```bash!= php artisan make:enum <class name> ``` ```PHP!= <?php namespace App\Enums; enum Category: string { case Fruits = 'fruits'; case People = 'people'; } ``` ```PHP!= use App\Enums\Category; use Illuminate\Support\Facades\Route; Route::get('/categories/{category}', function (Category $category) { return $category->value; }); ``` PHP 8.1 中的原生枚舉 --- :::info 版本需求: PHP 8.1 ::: PHP 8.1 版本引入了原生的枚舉支持。枚舉是一種特別的類型,可以讓開發者用更安全的方式定義一組固定的值。 ```PHP!= enum StateType: string { case OK = 'ok'; case WARNING = 'warning'; case CRITICAL = 'critical'; /** * 获取所有枚举值 * * @return array */ public static function values(): array { return array_map(fn($case) => $case->value, self::cases()); } } ``` ```PHP!= function isValueInEnum(string $value): bool { return in_array($value, StateType::values(), true); } // 使用函数检查 if (isValueInEnum('ok')) { echo 'Value exists in enum.'; } else { echo 'Value does not exist in enum.'; } ``` >laravel Requeste 验证规则 `Rule::in() `结合 PHP 8.1 枚举的 `values() `方法来进行字段验证。 ```php!= use Illuminate\Validation\Rule; use App\Enum\StateType; $rules = [ 'status' => [ 'nullable', 'numeric', Rule::in(StateType::values()), ], ]; ``` 在較低版本的 PHP 中模擬枚舉 --- 在 PHP 8.1 之前,PHP 沒有原生枚舉支持,所以我通過類來模擬。 :::info 版本需求: PHP 8.1 以下 ::: ```php!= 方法一 這個其實就可以使用了 class StateType { const OK = 'ok'; const WARNING = 'warning'; const CRITICAL = 'critical'; } // 使用改进的模拟枚举 echo StateType::OK(); // 输出:ok ``` PHP 枚舉的優勢簡述 --- - 易於維護:集中統一管理,方便更新和擴展。 - 減少錯誤:限制值範圍,降低 bug 風險,降低出現各種不同的寫法。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up