前置き
基本的には、Enumを使った方法と、DBのマスタテーブルを用意する方法の2パターンがあるかと思います。PHP8.1のEnumを使用するか、それ以前のverの場合は自作Enumが必要になるかと思います
config/const.phpにひたすら定数を列挙するという方法もありますが、ファイル自体の行数が肥大化しがちなのと、オブジェクト指向の観点からみるとやはり定数クラスを用いるほうが適切かと思われますので、本記事では割愛しています。
Enumを使用する場合
メリット
- 保守性が高い
プログラム内に記載し、意味のあるクラス名をつければ、可読性、保守性が高く、保守がしやすいコードになります。 - IDEの補完も効くのでコーディングがはかどる
- DBを見なくても、区分名称が把握・取得できる
デメリット
- 区分値の追加、名称の変更が容易でない
仕様変更などで、区分値の追加や、名称の変更がある際、プログラム修正が発生し、リリース作業も発生します。
ユースケース
- 基本的には、性別や受注ステータスなど、頻繁に変更されないデータはEnumで管理すると良い
DBのマスタテーブルを使用する場合
IDとその区分名称を管理する。一般的には、"mst_"という接頭辞をつけるというようなルールを設けてマスタテーブルを用意する
メリット
- 名称の変更がしやすい
区分値の名称を変更するのは、DBのレコードを更新するだけで良いので、プログラム修正が発生しない
デメリット
- ダブルメンテ
DBの区分値によって分岐処理を記述する際、
その区分値をアプリ側に持つ必要があるため、DBに値を持っていても、ダブルメンテナンス状態に陥る - テーブルの数が増えると管理しにくい
ユースケース
- 比較的変更される頻度の高い項目はこちらで管理するほうが良いかと思います
まとめ
いかがでしたでしょうか。本記事では、PHP開発における定数の管理方法について紹介しています。大別してEnumを使った方法と、DBのマスタテーブルを用意する方法の2パターンがありますが、それぞれのメリット・デメリットと各ユースケースについて簡単に説明しています。