データ変換モジュール DF
オブジェクト指向な encode/decode API
パッケージ DF は, とあるデータを別の形式に変換したり, または戻したりするための API です.
このモジュールは, PHP の標準関数としてはじめから用意されている json_encode, json_decode, base64_encode, base64_decode などの各種 encode/decode 用 API と同等の機能を提供します.
標準関数の代わりにこのモジュールを使用することで, 以下に挙げるような恩恵が受けられます.
オブジェクト指向の利点を活かしたデータ変換
このモジュールは, インタフェース Codec とそれを実装した各具象クラス (Peach_DF_JsonCodec, Peach_DF_Base64Codec, Peach_DF_SerializationCodec など) から成り立っています.
例えば以下のように, とある関数で使用する Codec の種類を自由に指定 (依存性の注入) できるようにすることで, ある値をどの形式でデータ変換するのか動的に制御することができます.
- function convertData($var, Peach_DF_Codec $codec) {
- return $codec->encode($var);
- }
- $arr = array(
- "foo" => 100,
- "bar" => 200,
- "baz" => 300,
- );
- var_dump(convertData($arr, $c2)); // string(54) "a:3:{s:3:"foo";i:100;s:3:"bar";i:200;s:3:"baz";i:300;}"
PHP のバージョンや環境に依存しない JSON の入出力
PHP で JSON を取り扱う際に利用するものといえば json_encode(), json_decode() が一般的ですが, 以下のように移植性・互換性の点で注意する必要があります.
- PHP のバージョンによって, サポートされているオプションが異なる (JSON モジュールの定義済み定数 を参考のこと)
- PHP 5.1 系ではそもそも json_encode() と json_decode() がサポートされていない
- ライセンス上の問題 により, Ubuntu や Debian など一部の環境では使用できない可能性がある
このモジュール内の JsonCodec クラスを使用することで, 以上の問題点を気にすることなく PHP 5.1.1 以上のすべての環境で JSON の入出力機能が実現できます. さらに JsonCodec では PHP 5.3.0 から 5.6.6 までに導入された以下のオプションすべてと同等の機能が使用できます.
- JSON_HEX_TAG
- JSON_HEX_AMP
- JSON_HEX_APOS
- JSON_HEX_QUOT
- JSON_FORCE_OBJECT
- JSON_NUMERIC_CHECK
- JSON_BIGINT_AS_STRING
- JSON_PRETTY_PRINT
- JSON_UNESCAPED_SLASHES
- JSON_UNESCAPED_UNICODE
- JSON_PARTIAL_OUTPUT_ON_ERROR
- JSON_PRESERVE_ZERO_FRACTION
- Next: UTF-8 文字列を取り扱う