第3章 Zend_Config
前のページ |  | 次のページ

## 第3章 Zend_Config

## 3.1. 導入

`Zend_Config` は、ウェブアプリケーションの設定データを 簡単に使用できるようにするために設計されたものです。 プロパティを使用して、さまざまな媒体から簡単に設定データを読み込めるようになっています。 また、階層構造のデータもサポートしています。現時点では、 `Zend_Config` は以下のヘルパークラス `Zend_Config_Array`、 `Zend_Config_Ini` および `Zend_Config_Xml` を提供しており、これらを用いて テキストファイルに格納された設定データを使用できるようになっています。

`Zend_Config` は単一継承モデルをサポートしており、 設定データの特定のセクションを別のセクションに継承させることができます。 `Zend_Config` は任意の階層の継承構造をサポートしていますが、 ひとつの設定データセクションが複数の親セクションを継承することはできません。

`Zend_Config` は内部で Countable インターフェイスおよび Iterator インターフェイスを実装しており、これを使用して設定データに容易にアクセスできるようになっています。 `Zend_Config` からは連想配列としてデータにアクセスできるようになっており、 この連想配列は多次元になることもあります。`Zend_Config_Ini` のようなヘルパークラスの典型的な役割は、この形式の配列を `Zend_Config` に渡すことです。しかし必ずしもこの決まりに従う必要はありません。

| 注意
`Zend_Config` は読み込んだ設定データをメモリ上で編集できるようになっていますが、 編集したデータを保存する機能はありません。 作成したり変更したりした設定データをメディアに保存する機能は、今のとこる Zend Framework の対象範囲外です。設定データを作成・編集してメディアに保存するには、 サードパーティからオープンソースのソリューションが提供されています。

例 3.1. INI ファイルからの設定データの読み込み

この例は、本番環境用の設定データを、 `Zend_Config_Ini` を使用して INI ファイルから読み込むものです。

    <?php
    require_once 'Zend/Config.php';
    require_once 'Zend/Config/Ini.php';
    $config = new Zend_Config(Zend_Config_Ini::load('/path/to/config.ini', 'production'));
    ?>

これで、`$config` オブジェクトのプロパティとして設定データを使用できるようになりました。 INI ファイルの中に以下のような形式でデータベース接続パラメータが含まれているとすると、

    [production]
    database.type     = pdo_mysql
    database.host     = db.example.com
    database.username = dbuser
    database.password = secret
    database.name     = dbname

アプリケーションがデータベースに接続する際には次のように記述します。

    <?php
    $myApplicationObject->databaseConnect($config->database->type,
                                          $config->database->host,
                                          $config->database->username,
                                          $config->database->password,
                                          $config->database->name);
    ?>

上の例にあるように、設定データにアクセスするには オブジェクトのプロパティと同じ構文を使用します。

`Zend_Config` クラスを拡張し、さまざまな用途に使用することも簡単にできます。 以下に示すのは、パブリックメソッド `dump()` を使用できるように拡張したクラスで、 このメソッドを使用すると、読み込んだ設定データを簡単に表示することができます。

    <?php
    class MyConfig extends Zend_Config
    {
        protected $_indent;

        public function dump()
        {
            $this->_indent = 0;
            echo "<pre>\n";
            $this->_dumpRecursor($this);
            echo "</pre>";
        }

        protected function _dumpRecursor($config)
        {
            foreach ($config as $key => $value) {
                echo str_repeat("    ", $this->_indent) . "$key =>";
                if ($value instanceof Zend_Config) {
                    echo "\n";
                    $this->_indent++;
                    $this->_dumpRecursor($value);
                    $this->_indent--;
                } else {
                    echo " $value\n";
                }
            }
        }
    }

    $config = new MyConfig(Zend_Config_Ini::load('/path/to/config.ini', 'production'));

    $config->dump();
    ?>]]</programlisting>
        <para>
            上の例の設定データの場合、このメソッドの出力は次のようになります。
        </para>
        <programlisting role="text"><![CDATA[<pre>
    database =>
        type => pdo_mysql
        host => db.example.com
        username => dbuser
        password => secret
        name => dbname
    </pre>

前のページ |  | 次のページ
2.4. Zend_Cache のバックエンド | ホーム | 3.2. Zend_Config_Array