忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


share

2025/04/07 01:51 |
ZF1.11 Zend_Config

設定ファイルでdefine()を並べる、ってのはよく見かける風景ですが、あれは少しでもPHPの知識がないとよくわかりません。
ということで簡単にiniやXML形式で設定を書けるようにできるのがZend_Configです。

> 現時点で Zend_Config が提供している設定データアダプタは Zend_Config_Ini と Zend_Config_Xml の二種類
http://framework.zend.com/manual/ja/zend.config.introduction.html
とか書かれていますが、実はしれっとYAML、JSON、そしてPHPの配列に対応しておりヘルプも書かれています。
http://framework.zend.com/manual/ja/zend.config.html
サンプルは何故かそれぞれのサンプルがバラバラな形になっているのですが、とりあえずZend_Config_Iniと形式を揃えて使ってみます。

config.ini

01[production]
02webhost                  = www.example.com
03database.adapter         = pdo_mysql
04database.params.host     = db.example.com
05database.params.username = dbuser
06database.params.password = secret
07database.params.dbname   = dbname
08[staging : production]
09database.params.host     = dev.example.com
10database.params.username = devuser
11database.params.password = devsecret

config.json
01{
02  "production":{
03    "webhost": "www.example.com",
04    "database":{
05      "adapter": "pdo_mysql",
06      "params":{
07        "host": "db.example.com",
08        "username": "dbuser",
09        "password": "secret",
10        "dbname": "dbname"
11      }
12    }
13  },
14  "staging":{
15    "_extends": "production",
16    "database":{
17      "params":{
18        "host": "dev.example.com",
19        "username": "devuser",
20        "password": "devsecret"
21      }
22    }
23  }
24}

config.xml
01<?xml version="1.0"?>
02<configdata>
03  <production>
04    <webhost value="www.example.com" />
05    <database>
06      <adapter value="pdo_mysql" />
07      <params>
08        <host value="db.example.com" />
09        <username value="dbuser" />
10        <password value="secret" />
11        <dbname value="dbname" />
12      </params>
13    </database>
14  </production>
15  <staging extends="production">
16    <database>
17      <params>
18        <host value="dev.example.com" />
19        <username value="devuser" />
20        <password value="devsecret" />
21      </params>
22    </database>
23  </staging>
24</configdata>

config.yaml
01production:
02  webhost: www.example.com
03    database:
04      adapter: pdo_mysql
05      params:
06        host: db.example.com
07        username: dbuser
08        password: secret
09        dbname: dbname
10staging:
11  _extends: production
12    database:
13      params:
14        host: dev.example.com
15        username: devuser
16        password: devsecret

config.php
01<?php
02  $arr_production = array(
03    'webhost'  => 'www.example.com',
04    'database' => array(
05      'adapter' => 'pdo_mysql',
06      'params'  => array(
07          'host'     => 'db.example.com',
08          'username' => 'dbuser',
09          'password' => 'secret',
10          'dbname'   => 'mydatabase'
11      )
12    )
13  );
14  $arr_staging = array(
15    'webhost'  => 'www.example.com',
16    'database' => array(
17      'adapter' => 'pdo_mysql',
18      'params'  => array(
19          'host'     => 'dev.example.com',
20          'username' => 'devuser',
21          'password' => 'devsecret',
22          'dbname'   => 'mydatabase'
23      )
24    )
25  );
26  return _IS_PRODUCTION ? $arr_production : $arr_staging;


index.php
01<?php
02 
03    //Zend_Config
04        require_once('Zend/Config.php');
05        require_once('Zend/Config/Ini.php');
06        require_once('Zend/Config/Json.php');
07        require_once('Zend/Config/Xml.php');
08        require_once('Zend/Config/Yaml.php');
09     
10    //Zend_Config_Ini
11        $config_ini = new Zend_Config_Ini('config.ini', 'staging');
12     
13    //Zend_Config_Json
14        $config_json = new Zend_Config_Json('config.json', 'staging');
15     
16    //Zend_Config_Xml
17        $config_xml = new Zend_Config_Xml('config.xml', 'staging');
18     
19    //Zend_Config_Yaml
20        $config_yaml = new Zend_Config_Yaml('config.yaml', 'staging');
21     
22    //Zend_Config
23        define('_IS_PRODUCTION', true);
24        $config_php = new Zend_Config(require_once('config.php'));

簡易さではiniとYAMLが飛び抜けてますね。

実は$config = new Zend_Config('config.ini', 'staging', Zend_Config::INI)とかできません。
Zend/Config.phpではなく、Zend/Config/Ini.phpなど使用形式に対応したアダプタを直接インクルードしないといけません。
これ、ヘルプの何処にも書かれてないんですが。

上記で取得したZend_Configインスタンスはどれも、
Zend_Db::factory($config->database);
というふうに同じ使い方が可能です。
またCountableおよびIteratorインターフェイスを実装しているのでcount()やforeachも使えます。
好きな形式でコンフィグを書くとよいでしょう。

PHPだけ設定の継承をしておらず、プロダクションかステージングかを引数に渡すこともできず残念なことになっています。
PHPの配列による設定はあくまでおまけのようなものです。
つうかPHPで書くんだったらZend_Config使う意味ねえよ。
 

 

PR

share

2011/02/07 23:33 | Comments(0) | TrackBack() | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<今週の実績 2011/02/13 | HOME | 買ったものリスト 2011/02/06>>
忍者ブログ[PR]