PHP で開発した CMS には、構成設定があります。それらは定数に保持されます。私がこのアプローチを選んだのは、定数には常にグローバル スコープがあり、すべて大文字の規則に従うとコード内で見やすく、誤って上書きされないためです。また、定数への参照が非常に効率的であることも理解しています。本当?。
これらの定数には 2 つのサブセットがあります。私のコードやセキュリティに関係しているため、ハードコードされているものもあります。その他は設定テーブル (MySQL) に格納され、初期化時に定数に読み込まれます。
これらの定数の数が増えていることと、将来使用するサードパーティの PHP モジュールと競合する可能性があることを懸念しています。
そのような設定を処理するためのより良い方法があるかどうか疑問に思っています。
私が持っていた主なアイデアは、現在持っている定数と 1 対 1 で対応する連想 (キーと値) 配列である 1 つのグローバル変数 (例: $settings) を作成することでした。したがって、代わりに
define('MY_SETTING, 'setting value');
してただろう
$setting['my_setting'] = 'setting value';
もちろん、これにアクセスするには2つの方法があります。最も簡単な方法は、 $setting 配列を直接参照することです。これには、設定にアクセスするすべての関数でグローバル ステートメントが必要になります (少なくとも設定の大部分はそうです)。もう 1 つの方法は、グローバル配列を参照して値を返す単一の関数 (たとえば、setting('my_setting)) を使用することです。どちらも定数ほどコンパクトではありませんが、構文的にコンパクトです。
最終的に考えたのは、システム内のすべての定数に定数プレフィックスを追加することでした。MY_SETTING は XY_MY_SETTING になります。これにより、少なくとも衝突のリスクが軽減されます。
あなたが推奨する他のアプローチはありますか?私がこれまでに行ったことについて何かコメントはありますか?
ありがとう。
追加情報: 4 つのアクセス方法の簡単なパフォーマンス テストを実行することにしました。結果 (表示されている数値は相対的な尺度です):
- 定数: 32
- 連想配列への直接参照: 29
- 連想配列にアクセスするための関数呼び出し: 91
- クラスの Get メソッド: 103
関数またはメソッドを処理するオーバーヘッドは明らかに高く、定数と配列参照の違いはごくわずかです。