【PHP8.x】UnitEnum::cases()メソッドの使い方
casesメソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
casesメソッドは、PHP 8.1で導入されたEnum(列挙型)に関連し、特定のEnum型の全てのケース(メンバー)を配列として取得するメソッドです。
このメソッドは、UnitEnumインターフェースを実装する全てのEnumクラスで利用可能です。UnitEnumインターフェースは、バックドEnum(値を持つ列挙型)と純粋なEnum(値を持たない列挙型)の両方を含む、すべてのEnumが暗黙的に実装する基本的なインターフェースとして機能します。
casesメソッドを呼び出すと、そのEnum型で定義されている全てのケースが、それぞれそのEnum型のインスタンス(オブジェクト)として格納された配列が返されます。例えば、UserStatusというEnumにACTIVE、INACTIVE、PENDINGというケースが定義されている場合、UserStatus::cases()を呼び出すと、これら3つのUserStatusインスタンスを含む配列が取得できます。
この機能は、アプリケーション内でEnumの全ての選択肢を動的にリストアップしたり、ユーザーインターフェースのドロップダウンメニューの項目として利用したり、または全てのケースに対して特定の処理を繰り返し実行したりする際に非常に役立ちます。Enumの定義が変更されても、プログラムのコード側で手動で選択肢のリストを更新する必要がなくなり、より堅牢で保守しやすいシステムを構築できます。
casesメソッドは引数を取らず、常にEnumの全ての有効なケースを定義された順序通りに返します。これにより、Enumの利用方法がさらに柔軟かつ安全になります。
構文(syntax)
1<?php 2 3enum Status 4{ 5 case ACTIVE; 6 case INACTIVE; 7 case PENDING; 8} 9 10$allStatuses = Status::cases();
引数(parameters)
引数なし
引数はありません
戻り値(return)
array
このメソッドは、enumケースの配列を返します。
サンプルコード
PHP Enumの全ケースを取得する
1<?php 2 3/** 4 * カラーを表す列挙型を定義します。 5 * PHP 8.1以降で導入されたEnumの機能を使用しています。 6 */ 7enum Color 8{ 9 case Red; 10 case Green; 11 case Blue; 12 case Yellow; 13} 14 15/** 16 * Enumの全てのケースを取得し、表示するサンプルコードです。 17 * UnitEnum::cases() メソッドは、Enumの全ケースを配列として返します。 18 */ 19 20// Color Enumの全てのケースを配列として取得します。 21// UnitEnum::cases()は、Enumクラス名::cases()のように静的に呼び出します。 22$allColors = Color::cases(); 23 24echo "利用可能な色の一覧:\n"; 25 26// 取得した各ケースをループで処理し、名前を表示します。 27foreach ($allColors as $colorCase) { 28 // $colorCaseはColor Enumのインスタンスです。 29 // ->nameプロパティでケースの名前(文字列)にアクセスできます。 30 echo "- " . $colorCase->name . "\n"; 31} 32 33// 戻り値がarrayであることを確認するために、var_dumpで型を確認することもできます。 34// var_dump($allColors); 35 36?>
PHP 8.1以降で利用可能なEnum(列挙型)は、事前に定義された固定の選択肢を扱うための機能です。例えば、曜日の種類や色の種類など、決まった値を表現する際に利用します。
UnitEnum::cases()メソッドは、このEnumに定義されている全てのケース(項目)を配列として取得するための便利な方法です。このメソッドは、対象のEnumクラス名に続けて静的に呼び出します。引数は不要で、呼び出すだけで全てのケースが配列として返されます。
サンプルコードでは、Red、Green、Blue、Yellowといった色を表すColorというEnumが定義されています。Color::cases()を呼び出すことで、これら4つのケース全てが配列$allColorsに格納されます。この配列の各要素はColor Enumのインスタンスであり、それぞれのインスタンスが持つ->nameプロパティにアクセスすることで、"Red"や"Green"といったケースの名前(文字列)を取得できます。取得した配列はforeachループで処理され、「利用可能な色の一覧」として各ケースの名前が表示されます。これにより、Enumにどのような選択肢が定義されているかをプログラム内で簡単に一覧表示し、活用することが可能になります。
このサンプルコードで利用されているenum機能は、PHP 8.1以降で導入されました。UnitEnum::cases()メソッドは、定義したEnumの全ケースを配列として取得する際に、Enumクラス名::cases()のように静的に呼び出す点が重要です。戻り値は、各ケースに対応するEnumインスタンスの配列となるため、直接文字列としてケース名が得られるわけではありません。取得した各インスタンスから、->nameプロパティを使用することで、ケースの名前(文字列)にアクセスできます。この点を理解し、適切に利用することでEnumの全ケースを安全に扱えます。
PHP 8 Enumのcases()で全ケースを取得する
1<?php 2 3/** 4 * PHP 8で導入されたEnum(列挙型)のシンプルな定義例です。 5 * これは「Unit Enum」と呼ばれ、バックアップ値(stringやintなど)を持たないタイプです。 6 * ファイルの種類を表すEnumとして使用します。 7 */ 8enum FileType 9{ 10 case Text; // テキストファイル 11 case Image; // 画像ファイル 12 case Video; // 動画ファイル 13 case Audio; // 音声ファイル 14 case Other; // その他のファイル 15} 16 17/** 18 * UnitEnum::cases() メソッドの使用例。 19 * 定義されたEnumの全てのケース(メンバ)を配列として取得し、表示します。 20 * 21 * このメソッドは、例えばWebアプリケーションでドロップダウンリストの選択肢を動的に生成する際などに役立ちます。 22 */ 23// FileType Enumの全てのケースを配列として取得します。 24// UnitEnum::cases() メソッドは引数なしで呼び出され、Enumの全てのケースインスタンスを含む配列を返します。 25$allFileTypes = FileType::cases(); 26 27echo "システムでサポートされているファイルタイプ一覧:\n"; 28 29// 取得した各Enumケースをループで処理し、その名前を表示します。 30foreach ($allFileTypes as $fileTypeCase) { 31 // Enumのケースはオブジェクトとして扱われます。 32 // その->name プロパティを通じて、定義されたケース名(文字列)を取得できます。 33 echo "- " . $fileTypeCase->name . "\n"; 34} 35 36?>
PHP 8で導入されたEnum(列挙型)は、事前に決められた選択肢をまとめて扱うための機能です。このサンプルコードでは、バックアップ値を持たない「Unit Enum」としてFileTypeという列挙型を定義しており、ファイルの種類を明確に表現しています。UnitEnum::cases()メソッドは、このように定義されたEnumの全てのケース(メンバ)を配列として取得するために利用されます。このメソッドは引数を一切受け取らず、呼び出すだけで、Enumの各ケースのインスタンスを含む配列を戻り値として返します。サンプルでは、FileType::cases()を呼び出すことで、FileTypeに定義された「Text」「Image」などの全ケースを$allFileTypesという配列として取得しています。取得した配列は、foreachループで一つずつ取り出し、それぞれのEnumケースインスタンスが持つ->nameプロパティを参照することで、ケースの名前(文字列)を取得し表示できます。この機能は、Webアプリケーションなどで、ドロップダウンリストの選択肢をEnumの定義から動的に生成する際など、定数の一覧をコードから柔軟に利用したい場面で非常に有用です。
PHP 8以降で導入されたEnumのcases()メソッドは、定義されたすべてのEnumケースを配列として取得します。このメソッドの戻り値は、単なる文字列の配列ではなく、各Enumケースを表すオブジェクトの配列である点にご注意ください。各ケースの実際の名前(文字列)を利用するには、$fileTypeCase->nameのように取得したオブジェクトのnameプロパティを参照する必要があります。cases()メソッドはEnumType::cases()のように、Enum名を直接指定して静的に呼び出すものです。取得したEnumケースオブジェクトは、型安全な値としてドロップダウンリストの生成だけでなく、条件分岐や関数引数に活用することで、コードの堅牢性と可読性を高めることができます。