を実装する方法..私は以下のショーとして中央構成レジストリを使用するアプリケーション。..コンフィグレジストリ - 私はいくつかの入力/指導した後、午前
アプリケーションは、iniファイルのためのconfigディレクトリを解析し、配列を設定していインデックス、ならびに単一の構成変数必要に応じてファイルの名前を使用して、クラス..へ
私はいくつかの問題が生じるなど、見ることができます:ファイル間
- 名前の衝突をし、内の設定VARSスクリプト
ネストした配列変数をプルできないため、次のコードが生成されます。
$ databases = config :: get( 'database'); $ actual_record = $ databases ['default'];
ネストされた値の2番目のgetパラメータを追加するように誘惑されましたが、3番目または4番目のレベルの値を引き出す必要がある場合はどうなりますか。
class config
{
private static $registry;
/**
*
*/
private function __construct() {}
/**
*
*/
public static function get($key)
{
if (isset(self::$registry[$key])) return self::$registry[$key];
else return FALSE;
}
/**
*
*/
public static function set($key, $value, $overwrite = FALSE)
{
// Does the variable already exist?
if (isset(self::$registry[$key]) && $overwrite === FALSE)
throw new Exception();
self::$registry[$key] = $value;
}
}
助けを事前に感謝しますが...
値を再度取得するメソッドを持つオブジェクトに各エントリをカプセル化できます。 'config :: getNested( 'database') - > get( 'default')'です。それが可能であれば、入れ子にしないでください。それらをドットで分けるのはどうですか? 'config :: get( 'database.default')' – Dan
これは愚かな質問かもしれませんが、database.default表記法をどのように配列呼び出しに変換しますか? – Lee
識別子をトークン化し、ドットで分割します。ドットがない場合はプレーンコール、それ以外の場合は最初のパラメータの名前と最初のドットの後ろのパラメータで指定されたフィールドの配列をフィールドで取得します。アイデアが好きなら、私は答えにいくつかのコードを投稿することができます。 – Dan