「効率的」とはどういう意味ですか?実行時の効率は?コーディング効率?明快さ?
実行時の効率の観点から、Truthの使用に関する提案は、おそらく最も単純で最良です。ただし、厳密なクラス/オブジェクト実装を使用してコーディングすることを好みます。実際には、定義は単なるグローバル定数です。
スクリプトの大部分をプロファイリングすると、構成参照をコーディングしてもランタイムに重要な影響を与えないことがわかります。そのため、毎回コーディングを単純化して明確にすることをお勧めします。
1つのアプローチは、シングルトンクラスを使用し(これを行うためのチュートリアルがたくさんあります)、魔法のメソッド__get()
を使用して、パラメーターアクセスを動的にオーバーロードできるようにすることです。これは、これらのプロパティメソッドがオブジェクト(非静的)パラメータ参照でのみ機能するため、単一のクラスを使用する必要があると私が感じる1つのケースです。したがって、次のように簡単に使用できます。
$cfg = Configuration::get();
...
... $cfg->someConfigParam ... // to refer to a config parameter
...
... /* or even */ ... Configuration::get()->someOtherParameter ...
上記$cfg
の例では、基本的にオブジェクトハンドルを格納しているため、これを行うのに実行時のコストはかかりません。必要がない場合は、構成アイテムを参照する各関数またはクラスコンストラクターの先頭にこのステートメントを配置できます。Configuration::get()->someOtherParameter
型呼び出しでコードを散らかします。
Configuration::__get()
アクセス関数とクラスコンストラクターは、個々のパラメーターのキャッシュとアクセスのすべての複雑さを処理できます。これは、構成のソースもカプセル化することも意味します。アプリケーション固有のD/B構成テーブル。1つ以上の構成ファイル、...; CookieやURIパラメータも(適切な検証を含める限り)。
個人的には、マジックメソッドを使用してオーバーロードすることはお勧めしません__set()
。IMO、構成パラメーターのオーバーライドまたは設定は、明示的なアクションである必要があるためです。$cfg->setConfigItem( 'someValue', TRUE );
アイデアが必要な場合は、configクラスのドキュメントへのリンクを次に示します。