このプロジェクトのメンテナンスは Tidelift を通じてサポートされています。
まず、主に、 SplEnum
PHP に統合されていないため、拡張機能を個別にインストールする必要があります。
クラス定数の代わりに列挙型を使用すると、次の利点があります。
enum をパラメーターの型として使用できます。 function setAction(Action $action) {
戻り値の型として列挙型を使用できます。 function getAction() : Action {
メソッド (例: format
、 parse
など) を使用して列挙型を強化できます。
列挙型を拡張して新しい値を追加できます (それを防ぐために列挙型をfinal
にします)
可能なすべての値のリストを取得できます (以下を参照)。
この Enum クラスはクラス定数を置き換えることを目的としたものではなく、意味がある場合にのみ使用されます。
composer require myclabs/php-enum
use MyCLabsEnumEnum;/** * Action enum * * @extends Enum<Action::*> */final class Action extends Enum {プライベート const VIEW = 'ビュー';プライベート const EDIT = '編集'; }
$action = Action::VIEW();// または動的キーを使用:$action = Action::$key();// または動的値を使用:$action = Action::from($value);/ / or$action = 新しいアクション($value);
ご覧のとおり、静的メソッドは自動的に実装され、列挙値にすばやくアクセスできるようになります。
クラス定数を使用する場合に比べて利点の 1 つは、列挙型をパラメーターの型として使用できることです。
関数 setAction(Action $action) {// ...}
__construct()
コンストラクターは値が列挙型に存在することを確認します。
__toString()
echo $myValue
すると、列挙値 (定数の値) が表示されます。
getValue()
enum の現在の値を返します。
getKey()
Enum の現在の値のキーを返します。
equals()
enum インスタンスが等しいかどうかをテストします (enum 値が等しい場合はtrue
、そうでない場合はfalse
を返します)
静的メソッド:
from()
Enum インスタンスを作成し、値が enum に存在することを確認します。
toArray()
メソッド 可能なすべての値を配列として返します (キーに定数名、値に定数値)
keys()
Enum クラス内のすべての定数の名前 (キー) を返します。
values()
すべての Enum 定数の Enum クラスのインスタンスを返します (キーに定数名、値に Enum インスタンス)
isValid()
テストされた値が列挙セットで有効かどうかを確認します
isValidKey()
テストされたキーが列挙セットで有効かどうかを確認します
assertValidValue()
列挙型セットで値が有効であることをアサートし、それ以外の場合は例外をスローします
search()
検索された値のキーを返す
最終クラス Action extends Enum {プライベート const VIEW = 'ビュー';プライベート const EDIT = '編集'; }// 静的メソッド:$action = Action::VIEW();$action = Action::EDIT();
静的メソッド ヘルパーは、 __callStatic()
を使用して実装されます。
IDE のオートコンプリートが必要な場合は、静的メソッドを自分で実装することもできます。
最終クラス Action extends Enum {private const VIEW = 'view';/** * @return Action */public static function VIEW() {return new Action(self::VIEW); } }
または、phpdoc を使用することもできます (これは、たとえば PhpStorm でサポートされています)。
/** * @method static Action VIEW() * @method static Action EDIT() */final class Action extends Enum {プライベート const VIEW = 'ビュー';プライベート const EDIT = '編集'; }
ネイティブ列挙型はバージョン 8.1 で PHP に導入されました: https://www.php.net/enumerations
プロジェクトが PHP 8.1 以降を実行している場合、またはライブラリに PHP 8.1 以降が最小要件として含まれている場合は、このライブラリの代わりにそれを使用する必要があります。
myclabs/php-enum
から移行する場合、推奨される方法で使用されていれば、労力は少なくなるはずです。
プライベート定数
最終クラス
オーバーライドされたメソッドはありません
移行に伴う変更点:
クラス定義を次から変更する必要があります
/** * @method static Action VIEW() * @method static Action EDIT() */final class Action extends Enum {プライベート const VIEW = 'ビュー';プライベート const EDIT = '編集'; }
に
enum アクション: string{case VIEW = 'view';case EDIT = 'edit'; }
クラスがタイプとして使用されていたすべての場所は引き続き機能します。
使用法と必要な変更:
手術 | myclabs/php-enum | ネイティブ列挙型 |
---|---|---|
インスタンスの取得は次から変更されます | $enumCase = Action::VIEW() | $enumCase = Action::VIEW |
裏付けられた値から列挙型を作成する | $enumCase = new Action('view') | $enumCase = Action::from('view') |
enum インスタンスのバックされた値を取得します | $enumCase->getValue() | $enumCase->value |
2 つの enum インスタンスを比較する | $enumCase1 == $enumCase2 または $enumCase1->equals($enumCase2) | $enumCase1 === $enumCase2 |
enum インスタンスのキー/名前を取得します。 | $enumCase->getKey() | $enumCase->name |
列挙型の考えられるすべてのインスタンスのリストを取得します。 | Action::values() | Action::cases() |
名前でマップされた列挙型の可能なインスタンスのマップを取得します | Action::values() | array_combine(array_map(fn($case) => $case->name, Action::cases()), Action::cases()) または (new ReflectionEnum(Action::class))->getConstants() |
列挙型の考えられるすべての名前のリストを取得します | Action::keys() | array_map(fn($case) => $case->name, Action::cases()) |
enum のすべての可能な裏付けされた値のリストを取得します。 | Action::toArray() | array_map(fn($case) => $case->value, Action::cases()) |
名前によってマップされた列挙型の可能なバッキング値のマップを取得します | Action::toArray() | array_combine(array_map(fn($case) => $case->name, Action::cases()), array_map(fn($case) => $case->value, Action::cases())) または array_map(fn($case) => $case->value, (new ReflectionEnum(Action::class))->getConstants())) |
PHP 8.1 以降のネイティブ列挙型
Doctrine 列挙型マッピング
Symfony ParamConverter の統合
PHPStanの統合