今回は,
Syck for PHP
Syckは,
Syck for PHPについて
Webサイト | http:// |
---|---|
ダウンロード | http:// |
バ-ジョン | 0. |
ドキュメント | なし |
その他 | PHP 5. |
作者 | Alexey Zakhlestin |
インストール
インストールは
リスト1 Syck for PHPのインストール
$ wget http://pecl.php.net/get/syck-0.9.2.tgz $ sudo pear install syck-0.9.2.tgz $ ls /usr/local/lib/php/extensions/no-debug-non-zts-20060613/ syck.so # syck.so があることを確かめる $ sudo vi /usr/local/lib/php.ini ### 以下を追加する ### extension_dir = "/usr/local/lib/php/extensions/no-debug-non-zts-20060613"
使い方
PHPにおけるSyckの使い方は,
- syck_
load() - YAMLドキュメントを読み込む
- syck_
dump() - データをYAMLドキュメントに変換する
syck_
リスト2 PHPにおけるSyckの使い方
<?php
// 拡張モジュールsyck.soを読み込む
if (! extension_loaded('syck')) {
dl('syck.so') or die('cannot load syck extension.');
}
// YAMLドキュメントを読み込む
$str = file_get_contents("example.yaml");
$ydoc = syck_load($str);
var_dump($ydoc);
// データをYAMLドキュメントに変換
echo syck_dump($ydoc);
?>
日本語の扱い
読み込み
不具合
yck for PHPは,
- syck_
load() - 循環構造を持つデータがあるとエラーになる
(リスト3) - syck_
dump() - 独自クラスのインスタンスオブジェクトがYAMLへ変換できない
- 配列が循環構造を持っているとエラー
(Segmentation fault) になる (リスト4)
syck_
リスト3 syck_
- &m1
name: Foo
child:
name: Bar
parent: *m1
リスト4 syck_
<?php
$arr1 = array(10);
$arr2 = array(20);
$arr1[] =& $arr2;
$arr2[] =& $arr1;
echo syck_dump($arr1);
?>
その他
PHPでは,
実際の動作としては,
- インデックスが0から始まり,
かつ連続していた場合はシーケンスに変換 - それ以外の場合はマッピングに変換
リスト5 PHPにおける配列の変換
<?
// インデックスが0から始まり連続していた場合は
// シーケンスへ変換される
$arr = array();
$arr[0] = 10;
$arr[1] = 20;
$arr[2] = 30;
echo syck_dump($arr); //=> [10, 20, 30]
// インデックスが連続していない場合は
// マッピングへ変換される
$arr = array();
$arr[0] = 10;
$arr[2] = 30;
echo syck_dump($arr); //=> {0: 10, 2: 30}
?>