3

Zend_Config_Ini と単純な定数ファイルの使用の利点を評価している最中です。

例 -

define('DB_HOST',localhost);

//versus

$config = new Zend_Config_Ini('/path/to/config.ini', 'staging');
echo $config->database->params->host;   // prints "dev.example.com"

唯一のことは、$config がグローバルにアクセスできないことです。そのため、Zend_Registry を使用してアプリケーションの使用を保存する必要があり、毎回開始する必要はありません。

これは必要以上の複雑さを追加しているようです....私は何かが欠けているのでしょうか、それともZend_Config + Zend_Registryは、アプリが成長するにつれて長期的に優れた手法ですか?

4

3 に答える 3

4

構成でレジストリを使用する主な利点は、グローバル名前空間の汚染を回避することです。たとえば、サードパーティのライブラリを含めたいとします。アプリとライブラリの両方が定数 DB_HOST を定義します。ダメ。

さらに、Zend Framework のファクトリの多くは、config オブジェクトを使用してインスタンスを作成します。Zend_Dbはこれの良い例です。それを渡すだけで$this->database、アダプターをインスタンス化するために必要なものが取得されます。

また、ファインダー メソッドなどのカスタム機能を使用してレジストリを拡張することもできます。Fowler によるパターンの説明を確認してください。

于 2009-11-26T22:46:17.467 に答える
1

はい、その通りです。設定に Zend 認定の方法を使用することは、一連のグローバル定数を定義するよりも複雑です。得られるメリットは、

グローバル名前空間の衝突なし

アプリケーションを別のプロジェクトと統合する必要がある場合、グローバル定数がアプリケーション構成を表すと問題が発生する可能性があります。別のプロジェクトに という名前の定数がある可能性はどのくらいDB_HOSTですか? ハイブリッド システムを使用している開発者は、どの定数がアプリケーションと統合アプリケーションの構成であるかをどのように判断できますか?

他人の仕事の上に構築する

したがって、すべての構成値を含む単一のファイルがあります。それをさまざまな環境にどのように展開しますか? (プロダクション、ステージングなど) あなたはソリューションを思い付くことができる頭の良い人である可能性がありますが、あなたのプロジェクトに参加する別の開発者は、そのソリューションがどのように機能するかをどのように知るのでしょうか? アプリケーション内の他のモジュールは、グローバル構成の読み取り方法をどのように知るのでしょうか?

Zend_Configすでに多くの問題を「解決」しています。前もってもう少し複雑さと抽象化を行うことで、既知の道筋が得られ、Yet Another Configuration System を発明してサポートする代わりに、アプリケーションの問題を解決することに多くの時間を費やすことができます。

于 2009-11-26T23:01:38.353 に答える
1

の優れた利点はZend_Config、「PHP ソース コード ファイル」に依存しないことです。.ini ファイルだけで十分です。また、PHP ファイルではなく .ini ファイルを変更することを好む人もいます。

また、.ini/XML ファイルをプログラムで変更する方が簡単です。それを行うためのクラス/関数があります。

.ini ファイルとZend_Configを使用すると、優れた機能が既に提供されています。たとえば、セクション間の継承(つまり、「ジェネリック」セクションと、いくつかの値を上書きする「ステージング」および「プロダクション」を持つことができます)


についても興味をそそられるZend_Configのは、一貫性です。Zend Framework では、Zend_Application1 つの構成ファイルがあることを前提としています。だから、なぜ2番目のものはありませんか?または、最初のものを再利用しますか?

また、フレームワークのいくつかのクラスでも同じZend_Configです。すでにそれを持っている場合は、突然簡単になります;-)


定義を含む PHP ファイルと .ini ファイルのどちらかを選択する必要がある場合、構成可能なものについては、おそらく .ini ファイルを使用します(必要に応じてZend_Config+も使用Zend_Registryします)

于 2009-11-26T22:44:25.953 に答える