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などは小文字が望ましい.

  • 整数
  • 浮動小数点数
  • 文字列(バックスラッシュによるエスケープシーケンス記法を含む,ダブルクォーテーションでくくった文字列)
  • 真偽値(truefalse
  • 配列(順番付けられたマップ)
  • 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により値がキャッシュされる効果が見込まれるため, 翻訳リソースなど,全てのユーザが読み込むそこそこサイズのあるリソースを読み込むのに最適である.