PHPにはYAMLに、Spyc.class.phpを使う。Symfonyにも組み込まれていり。コレ便利。他にも使っている。
YAMLを配列にロードする。
$yml ="-- hoge: - bar foo: bar: 1"; $array = Spyc::YAMLLoad($yml);#引数は文字列、またはファイル名のどちらか #static以外にインスタンスを使っても良い $spyc = new Spyc; $array = $spyc->load("settings.yml");
配列をYAMLにロードする。
$array[] = array("a", "b", "c"); $array["test"] = array("1", "2", "3"); $yml = Spyc::YAMLDump($array);
これだけ。YAMLをどんどん使いましょう。
これ以外にも設定には、parse_ini_file、JSON、serialize、Pear::Configが使えます。組み合わせて使うと嬉しい。
JavaのProperitesとYAMLをマージしつつ、XMLで出力して遊ぶ。
Pear::Configと組み合わせYAMLをXMLと相互変換
$config = new Config(); $prop = $config->parseConfig( "GenericConf", "java.properties" array("comment" =>"#", "equals" =>"=", "newline" =>"\\" ); ); $array = $prop->toArray("PHPArray"); $yaml = Spyc::YAMLLoad("perl.dumper.yml"); $array = array_merge( $array, $yaml ); $element = $config->parseConfig( "PHPArray", $array ); $xml = $element->toString("xml");
YAMLをXMLに変換したり、PHPのINIファイルにしたり相互変換がとても便利です。相互変換にはPear::Config_Container_PHPArray を経由しています。変換するときに、toString($TARGET_TYPE);と書くのがミソ。
ただ、APIドキュメントがないので、Hackできないじゃん。と思ってSpycをphpDocumentorに掛けてみた。
Spyc.class.phpの概要
Variable Summary Description | Vars (details) | Methods (details)
- mixed $_allNodes
- mixed $_dumpIndent
- mixed $_dumpWordWrap
- mixed $_haveRefs
- mixed $_inBlock
- mixed $_isInline
- mixed $_lastIndent
- mixed $_lastNode
Method Summary Description | Vars (details) | Methods (details)
- static string YAMLDump (array $array, [int $indent = false], [int $wordwrap = false])
- static array YAMLLoad (string $input)
- string dump (array $array, [int $indent = false], [int $wordwrap = false])
- array load (string $input)
- array _array_kmerge (array $arr1, array $arr2)
- array _buildArray ()
- string _doFolding ($value $value, $indent)
- string _doLiteralBlock ($value $value, $indent $indent)
- string _dumpNode ($key $key, $value $value, $indent $indent)
- array _gatherChildren (int $nid)
- int _getIndent (string $line)
- array _inlineEscape ( $inline)
- void _linkRef ( &$n, $key, [ $k = null], [ $v = null])
- bool _linkReferences ()
- bool _makeReferences ( &$z, object $z)
- boolean _nodeArrayizeData ( &$node, array $node)
- array _parseLine (string $line)
- mixed _toType (string $value)
- string _yamlize ($key $key, $value $value, $indent $indent)
- string _yamlizeArray ($array $array, $indent $indent)
殆ど全てがProtectedかPrivate。なのでHackすることが、なにもない。Pear::Configと組み合わせて相互変換くらいか。
残念なのは、YAMLをロードするとHASHになること。Pear::ConfigもArrayを扱う。オブジェクトでロードできたら便利だろうけど。。。リフレクション書いてみようかな。