PANPについて
PHP界でメジャーだが知られざるシリアライズ形式 PANP について
PANPとは?
PANP(PHP Array Notation with Pading)は軽量なデータ記述言語の1つである.
構文はPHPにおける配列の表記法をベースとしているが,PANPはPHP専用のデータ形式であり,様々なソフトウェアやプログラミング言語間におけるデータの受け渡しに使えるよう設計されていない.
PANPの例
<?php return [ "Name" => "Foo", "Id" => 1234, "Rank" => 7 ];
特徴
PANPはPHPにおける配列表記法のサブセットであるので,PHPでの利用に限られる.
PANPは単純であるので,特にPHPの分野で利用が広がりつつある.PHPでPANPをパースして読み込むには,ファイルをPHPのコードとして解釈させるinclude
関数を作用させるだけでよい.このように,広く普及しているPHPで簡単に読み込めるため,PHPの開発者たちから注目を浴びるようになった.
表記方法
PANPで表現するデータ形は以下のとおりで,これらを組み合わせてデータを記述する.true
, false
, null
などは小文字が望ましい.
- 整数
- 浮動小数点数
- 文字列(バックスラッシュによるエスケープシーケンス記法を含む,ダブルクォーテーションでくくった文字列)
- 真偽値(
true
とfalse
) - 配列(順番付けられたマップ)
null
数値は10進法表記のほか,8進数0123
,16進数 0x1A
,2進数0b11111111
が利用できる.また浮動小数点数としては1.2e3
といった指数表記もできる.
文字列は(PANPそれ自体と同じく)Unicode文字列である.基本的にはPHPの文字列リテラルと同様だが,囲むのにシングルクォートは使えない.バックスラッシュによるエスケープがある.
配列はゼロ個以上の値をコンマで区切って,角かっこでくくることで表現する.例えば以下のように表現する:
["apple", "banana", "turip"]
マップはキーと値のペアをコロンで対にして,これらの対をコンマで区切ってゼロ個以上列挙し,全体を角かっこでくくることで表現する.例えば以下のように表現する:
["name" => "K. Kusano", "age" => 13]
エンコーディング
割愛
PHPによるPANPの利用
PHPにおいてincludeで同期的にPANPでのデータを受け取る例を示す:
古典的な例
<?php $a = unserialize(file_get_contents("data.txt"));
新しい記法を利用した例
<?php $a = include("data.panp");
他のデータ記述法との関係
XML
PANPとXMLとの共通点は <?
から開始するということのみである.
YAML
YAMLは「ヤムル」と発音し,退職を連想させるが,PANPは「パンピー」と発音し,一般ピープルを連想させる.
実装
PANPの実装はPHPインタプリタのincludeの振る舞いに依存する.opcacheにより値がキャッシュされる効果が見込まれるため, 翻訳リソースなど,全てのユーザが読み込むそこそこサイズのあるリソースを読み込むのに最適である.