S eda1a14b50ee24bcab19b62f40858e76 Zend_Config

概要

Zend_Configは値を全てZend_Configオブジェクトで管理している。
// こんなことができます!
$config->database->development->username;
マジックメソッド__getを定義しているので、配列アクセスと同様に階層を掘ることができる。

すぐに使える!Zend_Config

配列をそのまま渡せばOK。後で変更する場合は第2引数$allowModificationsをtrueにしておきましょう。
require_once 'Zend/Config.php';
$config = new Zend_Config(array(
    'development' => array(
        'database' => array(
            'username' => 'akkun', 
            'password' => 'akkun', 
            'dbname' => 'hoge'))));

echo $config->development->database->username;

iniファイルを使う

こんなファイルを作って適当な名前で保存。「.」で区切ることで階層構造になる。
development.database.dbname   = mydb
development.database.username = akkun
development.database.password = pass
こういう形式でもOK(セクションにすると継承や読み込み制御ができる)
[development]
database.dbname   = mydb
database.username = akkun
database.password = pass

呼び出し方
require_once 'Zend/Config/Ini.php';

$config = new Zend_Config_Ini(
  'config.ini', null, array('allowModifications' => true));

echo $config->development->database->username;


xmlファイルを使う

value属性ならいちいち囲まなくてもいい。


  

継承はextends属性。配列にするなら同じ要素を複数列挙するだけ。
ただし数値配列は添え字が指定できない(parseエラーになる)。これは回避できるのだろうか?

sample1.xml


  
    
    
    
  

$config = new Zend_Config_Xml('sample1.xml');
$config->directory->file->toArray() // array('aaa', 'bbb', 'ccc')

sample2.xml


  
    
      
      
      
    
  

$config = new Zend_Config_Xml('sample2.xml');
$config->directory->file->toArray()
  // array('aaa' => 'a.file', 'bbb' => 'b.file', 'ccc' => 'c.file')

PEAR::Configとの違いとか


・設定の継承ができる
・iniファイルでも「.」区切りにより階層構造ができる。
・・でも値は「,」で区切られたやつを配列にしてくれない。
・mergeメソッドで上書きできる。


雑感

iniファイルは単純なkey/valueの組み合わせの羅列が大量にある場合は便利。セクションを使えば2階層ぐらいは楽に書ける。階層が深くなる場合はXMLの方が有利かと思いきや、数値添え字の制約があって、思わぬところでハマる可能性大。はぁ…。

継承はトップレベルでしか使えない。実装はZend_Config_XmlやZend_Config_Iniでやってるので、独自に作ればなんとでもできるんだろうけど…。

よくわからない点

Zend_Config_XmlやZend_Config_Iniがなんでこんなクラス設計になったのかがよくわからん。読み込んでparseしてるだけなのに、Zend_Config継承する必要なくね?ここはFactory Method パターンにするべきだと思うんだけど…。new する方がわかりやすいからかなぁ。

もしかして

    他の人の「Zend_Config」

    S eda1a14b50ee24bcab19b62f40858e76

    無所属ソフトウェアエンジニア

    (1722words)

    最新

      最新エントリ