💨

PHPのEnumを使用してみる

2023/03/29に公開

PHP8.1からEnumが実装されましたが、自分は今までEnumの機構のあるプログラミング言語を触ったことがなく(TypeScriptはあるけどほぼEnumは使った事無し)どのような場面で使うのかよく分かってないので、増田 亨さんの現場で役立つシステム設計の原則 ~変更を楽で安全にするオブジェクト指向の実践技法にある料金タイプの例をPHPのEnumを使用して実装していく。

料金タイプの例

Enum FeeType: string
{
    case ADULT = "adult";
    case CHILD = "child";
    case SENIOR = "senior";

    /**
     * @return int
     */
    public function getFee(): int
    {
        return match($this) {
            self::ADULT => 1000,
            self::CHILD => 500,
            self::SENIOR => 750,
        };
    }
}
  • PHPのEnumはstringとint型のプリミティブな値しか持てないのでlabelに相当する文字列を割り当てています。
  • JavaだとEnum自体に状態をPHPだと持てないのでEnumに直接料金を問い合わせます。

function getFee(FeeType $feeType)
{
  return $feeType->getFee();
}

getFee(FeeType::ADULT);

感想

  • シンプルで分かりやすい
  • 他の言語のEnumと比べてちょい機能が制限されているので例示されているコードを真似るにはひと工夫必要そう

Discussion