第3章 Zend_Config

目次

3.1. 導入
3.2. Zend_Config_Array
3.2.1. 導入
3.3. Zend_Config_Ini
3.3.1. 導入
3.4. Zend_Config_Xml
3.4.1. 導入

3.1. 導入

Zend_Config は、ウェブアプリケーションの設定データを 簡単に使用できるようにするために設計されたものです。 プロパティを使用して、さまざまな媒体から簡単に設定データを読み込めるようになっています。 また、階層構造のデータもサポートしています。現時点では、 Zend_Config は以下のヘルパークラス Zend_Config_ArrayZend_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();
?>   

上の例の設定データの場合、このメソッドの出力は次のようになります。

<pre>
database =>
    type => pdo_mysql
    host => db.example.com
    username => dbuser
    password => secret
    name => dbname
</pre>