【技術メモ】laravel-enumがバージョンアップしていることに気づいた・・・
laravel-enumのマイナーバージョンがアップしていることに気づきました。早速案件に導入して試してみました。
[ 目次 ]
はじめに
こんにちは、香港に住んでいるWEBデベロッパーのなかむ(@nakanakamu0828)です。
以前の投稿「LaravelにてEnumを導入する 」で紹介しましたが、私はBenSampo/laravel-enumを利用しています。
本日 READMEを確認していたところバージョンアップしていることに気づきました。
その内容をメモとして残します!!
laravel-enumのEnumクラスをインスタンス化する
今回気づいた機能は以下です。
getInstance(string|int $enumValue): Enum
getInstanceというstatic関数を利用することでEnumクラスのインスタンスを取得することができるようになりました!!
こちらの機能は、1.17.0から導入されたようです!
以下のような方法でインスタンス化できます。
// Standard new PHP class, passing the desired enum value as a parameter
$enumInstance = new UserType(UserType::Administrator);
// Static getInstance method, again passing the desired enum value as a parameter
$enumInstance = UserType::getInstance(UserType::Administrator);
// Statically calling the key name as a method
$enumInstance = UserType::Administrator();
どのように利用するのか?
関数の引数にEnumのインスタンスが渡せるようになりました!!
インスタンスを渡す例は。。。
// Enum定義
final class UserType extends Enum
{
const Administrator = 0;
const Moderator = 1;
const Subscriber = 2;
const SuperAdministrator = 3;
}
// 引数にEnumクラスを定義
public function hoge(UserType $userType)
{
}
// Administratorを引数に渡す!
hoge(UserType::Administrator());
今まで何が良くなかったのか?
// 引数にEnumクラスを定義
public function hoge(int $userType)
{
}
// Administratorを引数に渡す!
hoge(UserType::Administrator);
// 引数がintなのでマジックナンバーでも動く
hoge(0);
hoge関数の引数がintやstringになることで、Enumで定義していない値を渡すことができます。
これは微妙ですね。
改善されてよかったです!!