目次
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();
?>
上の例の設定データの場合、このメソッドの出力は次のようになります。
<pre>
database =>
type => pdo_mysql
host => db.example.com
username => dbuser
password => secret
name => dbname
</pre>