# Zend_Config_Ini(日本語)

Zend_Config_Ini は、おなじみの INI 形式のファイルに保存された設定データを、Zend_Config を通じてオブジェクトのプロパティとして扱えるようにします。 この INI 形式は、階層化された設定データを扱うこと、 そしてセクション間の継承関係を扱うことに特化されています。 設定データの階層構造は、キーの名前をドットあるいはピリオド (.) で区切ることによって表現します。 他のセクションを拡張するなどの継承関係は、 セクション名に続けてコロン (:) を、 そしてその後に継承元のセクション名を指定することで表します。

INI ファイルのパース

Zend_Config_Ini は、PHP の parse_ini_file() 関数を使用しています。このドキュメントでは、Zend_Config_Ini 固有の挙動に注意しましょう。例えば、特殊な値として "`TRUE`" や "`FALSE`"、 "yes"、"no" そして "`NULL`" を処理できることなどです。

キーの区切り文字

デフォルトでは、キーの区切り文字はピリオド (.) です。 しかし、これは変更することもできます。変更するには、 Zend_Config_Ini オブジェクトの作成時に `$options` のキー nestSeparator を設定します。たとえばこのようになります。

    $options['nestSeparator'] = ':';
    $config = new Zend_Config_Ini('/path/to/config.ini',
                                  'staging',
                                  $options);

Zend_Config_Ini の使用法

この例は、Zend_Config_Ini を使用して INI ファイルから設定データを読み込むための基本的な方法を説明するものです。 この例では、運用環境の設定と開発環境の設定を両方管理しています。 開発環境用の設定データは運用環境用のものと非常に似ているので、 開発環境用のセクションは運用環境用のセクションを継承させています。 今回の場合なら、逆に運用環境用のセクションを開発環境用のものから継承させてもいいでしょう。 そうしたからといって特に状況が複雑になるわけではありません。 ここでは、次のような内容の設定データが `/path/to/config.ini` に存在するものとします。

    ; 運用環境の設定データ
    [production]
    webhost                  = www.example.com
    database.adapter         = pdo_mysql
    database.params.host     = db.example.com
    database.params.username = dbuser
    database.params.password = secret
    database.params.dbname   = dbname

    ; 開発環境の設定データは、運用環境のデータを継承したうえで
    ; 必要に応じて値を上書きします
    [staging : production]
    database.params.host     = dev.example.com
    database.params.username = devuser
    database.params.password = devsecret

次に、開発者が開発環境用の設定データを INI ファイルから読み込むことを考えます。 これは簡単なことで、単に INI ファイルとセクションを指定するだけです。

    $config = new Zend_Config_Ini('/path/to/config.ini', 'staging');

    echo $config->database->params->host;   // "dev.example.com" と出力します
    echo $config->database->params->dbname; // "dbname" と出力します

Zend_Config_Ini コンストラクタのパラメータ

パラメータ | 説明
--- | ---
`$filename` | 読み込む INI ファイル。
`$section` | INI ファイル内で読み込む [section]。 このパラメータを `NULL` にすると、 すべてのセクションを読み込みます。 また、セクション名の配列を指定すると、複数のセクションを読み込みます。
`$options` (デフォルトは `FALSE`) | オプションの配列。以下のキーをサポートしています。 allowModifications: `TRUE` を指定すると、 読み込んだ設定データをインメモリで後で変更できます。 デフォルトは `FALSE` です。 nestSeparator: ネストの区切り文字として使用する文字を設定します。 デフォルトは "." です。