PHPEncoder は、変数をエクスポートし、組み込み関数var_export()
と同様の変数の PHP コード表現を生成するための PHP ライブラリです。ただし、組み込み関数と比較して、このライブラリには出力をカスタマイズするためのオプションが多数用意されているため、読み取り可能な構成ファイルや最適化されたキャッシュ ファイルなど、さまざまな種類の目的のコードを簡単に生成できます。
このライブラリの目的は、組み込みのvar_export()
のいくつかの欠点に対処することです。たとえば、出力内の空白の量を制御する方法はなく、さまざまな配列表記を選択する方法もありません。このライブラリは、オブジェクトを組み込み関数と比較して実際に役立つ PHP コードに変換する機能も提供します。
このライブラリには多数のカスタマイズ オプションがあり、目的に合ったコードを作成できます。出力のサイズを制限する必要がある場合は、非常にコンパクトなコードを作成したり、動的に生成された PHP ファイルに実際に適合するスタイルでコードを作成したりできます。
API ドキュメントは http://kit.riimu.net/api/phpencoder/ から入手できます。
このライブラリをインストールする最も簡単な方法は、Composer を使用して依存関係を処理することです。 Composer 経由でこのライブラリをインストールするには、次の 2 つの手順に従ってください。
プロジェクト ルートで Composer コマンドライン インストールを実行して、 composer.phar
を取得します。
インストール スクリプトを実行すると、 composer.phar
ファイルがプロジェクト ルートに存在し、次のコマンドを実行できるようになります。
php composer.phar require "riimu/kit-phpencoder:^2.3"
Composer 経由でこのライブラリをインストールした後、インストール中に Composer によって生成されたvendor/autoload.php
ファイルを含めることでライブラリをロードできます。
Composer の使用方法にすでに慣れている場合は、次のcomposer.json
ファイルをプロジェクトに追加し、 composer install
コマンドを実行することで、ライブラリを依存関係として追加することもできます。
{
"require" : {
"riimu/kit-phpencoder" : " ^2.3 "
}
}
Composer を使用してライブラリをロードしたくない場合は、最新リリースをダウンロードし、 src
フォルダーをプロジェクトに抽出することで、ライブラリを手動でダウンロードすることもできます。次に、提供されたsrc/autoload.php
ファイルをインクルードして、ライブラリ クラスをロードできます。
このライブラリが提供する最も関連性の高いメソッドは、 PHPEncoder
が提供するencode()
メソッドです。このメソッドは任意の値を引数として受け取り、その値の PHP コード表現を返します。
例えば:
<?php
require ' vendor/autoload.php ' ;
$ encoder = new Riimu Kit PHPEncoder PHPEncoder ();
echo $ encoder -> encode ([ ' foo ' => ' bar ' , [ 1 , true , false , null , 1.0 ]]);
これにより、次の出力が作成されます。
[
'foo' => 'bar',
[1, true, false, null, 1.0],
]
もちろん、このライブラリの最も重要な機能は、作成された PHP コードをカスタマイズできることです。 encode()
メソッドは 2 番目の引数として、返された PHP コードをカスタマイズするために使用できるオプションの配列を受け取ります。例えば:
<?php
require ' vendor/autoload.php ' ;
$ encoder = new Riimu Kit PHPEncoder PHPEncoder ();
echo $ encoder -> encode ([ ' foo ' => ' bar ' , [ 1 , true , false , null , 1.0 ]], [
' array.inline ' => false ,
' array.omit ' => false ,
' array.indent ' => 2 ,
' boolean.capitalize ' => true ,
' null.capitalize ' => true ,
]);
これにより、次の出力が作成されます。
[
'foo' => 'bar',
0 => [
0 => 1,
1 => TRUE,
2 => FALSE,
3 => NULL,
4 => 1.0,
],
]
エンコード オプションを使用すると、 encode()
メソッドの出力をカスタマイズできます。これらのオプションは 3 つの異なる方法で設定できます。
PHPEncoder
コンストラクターに配列として提供できます。setOption()
メソッドを介して設定できます。encode()
メソッドの 2 番目の引数として配列として渡すことができます。 encode()
メソッドに渡されるオプションは一時的なものであり、後続の呼び出しには適用されないことに注意してください。
空白: <ブール値> (true)
false
に設定すると、余分な空白の生成はすべて無効になり、空白に影響するその他の設定はすべて無視されます。
hex.capitalize : <ブール値> (false)
true
に設定すると、出力内のすべての 16 進文字が小文字ではなく大文字を使用して書き込まれます。
null.capitalize : <ブール値> (false)
true
に設定すると、すべてのnull
値が小文字ではなく大文字で書き込まれます。
boolean.capitalize : <ブール値> (false)
true
に設定すると、すべてのtrue
およびfalse
値が小文字ではなく大文字で書き込まれます。
integer.type : <"2進数"|"8進数"|"10進数"|"16進数""> ("10進数")
整数の出力構文を変更します。たとえば、 "hexadecimal"
タイプを使用すると、数値15
が0xf
として出力されます。
float.integers : <boolean|"all"> (false)
true
に設定すると、整数を表し、浮動小数点数で正確に表される値を持つすべての float は、float ではなく整数としてエンコードされます。 (たとえば、値2.0
は2
としてエンコードされます)。正確に表現されていない値を含めるには、オプションを"all"
に設定できます。
float.export : <ブール値> (false)
true
に設定すると、浮動小数点はvar_export()
を使用してエンコードされます。これにより、非整数浮動小数点数の出力は、標準実装されたメソッドと比較してわずかに異なります。場合によっては、これにより、より正確な数値が生成される可能性がありますが、表現があまりきれいではなくなります。
float.precision : <整数|false> (17)
エンコードされた浮動小数点値の最大精度。これは通常、エンコードされた浮動小数点の最大桁数も意味します。値がfalse
に設定されている場合は、PHP ini 設定のserialize_precision
代わりに使用されます。浮動小数点値の仕組みにより、17 を超える値は追加の精度を提供しないことに注意してください。
string.binary : <ブール値> (false)
true
に設定すると、有効な UTF-8 ではない文字列は Base64 でエンコードされ、 base64_decode()
呼び出しでラップされます。
string.escape : <ブール値> (true)
true
に設定すると、32 ~ 126 の ASCII 範囲外のバイトを含むすべての文字列が二重引用符で書き込まれ、範囲外の文字がエスケープされます。
string.utf8 : <ブール値> (false)
このオプションとstring.escape
両方がtrue
に設定されている場合、文字列内のすべての有効なマルチバイト UTF-8 文字は、PHP7 Unicode コード ポイント構文を使用してエンコードされます。この構文は 7.0 より前の PHP バージョンでは機能しないことに注意してください。
string.classes : <string[]> ([])
クラスのリスト、または文字列内で見つかった場合にクラス解決演算子::class
を使用してエンコードできるクラスのクラス名前空間プレフィックスを定義します。たとえば、値['Riimu\']
を指定すると、 RiimuKitPHPEncoder::class
のようなRiimu
名前空間内のクラス名のように見えるすべての文字列がエンコードされます。
string.imports : <string[]> ([])
結果のコード ファイルで使用されるインポートのリスト。これにより、より短い形式を使用してクラス名を記述することができます。リストは、名前空間またはクラスをキーとし、使用された名前を値として持つ連想配列である必要があります。現在の名前空間を示すには空の文字列を使用します。
たとえば、結果のファイルのnamespace RiimuKitPHPEncoder;
そしてuse PHPUnitFrameworkTestCase;
、配列を['Riimu\Kit\PHPEncoder\' => '', 'PHPUnit\Framework\TestCase' => 'TestCase']
として設定できます。
array.short : <ブール値> (true)
true
に設定すると、配列は長い配列表記のarray()
を使用する代わりに角括弧[]
を使用して囲まれます。
array.base : <整数|文字列> (0)
スペースの数または文字列としての配列の基本インデント。特定のレベルのインデントでコードをファイルに出力する必要がある場合に便利です。
array.indent : <整数|文字列> (4)
スペースまたは文字列の数としての単一レベルのインデントのインデント量。
array.align : <ブール値> (false)
true
に設定すると、配列代入演算子=>
はスペースを使用して同じ列に配置されます。有効にした場合でも、 array.omit
およびarray.inline
オプションは引き続き尊重されますが、これは特定の配列内のすべてのキーを省略できる場合に限られます。
array.inline : <ブール値|整数> (70)
true
に設定すると、配列キーなしで書き込める配列はすべて 1 行で書き込まれます。代わりに整数が指定された場合、配列はその文字数を超えない場合にのみ単一行として書き込まれます。 array.omit
が false に設定されている場合、このオプションは効果がありません。
array.omit : <ブール値> (true)
true
に設定すると、冗長な配列キーは含まれません (たとえば、配列[0 => 'a', 1 => 'b']
は['a', 'b']
としてエンコードされます)。
array.eol : <文字列|false> (false)
配列出力で使用される行末文字。 false
に設定すると、代わりにデフォルトのPHP_EOL
が使用されます。
オブジェクト.メソッド: <ブール値> (true)
true
に設定すると、エンコードされたオブジェクトのメソッドtoPHP()
およびtoPHPValue()
がチェックされます。 toPHP()
メソッドが存在する場合、返された文字列はオブジェクトの PHP コード表現として使用されます。代わりにメソッドtoPHPValue()
が存在する場合、戻り値は PHP としてエンコードされ、オブジェクトのコード表現として使用されます。
object.format : <文字列> ('vars')
デフォルトのオブジェクトエンコーディング形式。可能な値は次のとおりです。
string
オブジェクトを string にキャストし、その文字列を PHP としてエンコードします。serialize
オブジェクトをシリアル化し、 unserialize()
でラップします。export
var_export()
オブジェクト表現を模倣します。array
オブジェクトを配列にキャストし、その配列をエンコードしますvars
get_object_vars()
を使用してオブジェクトを配列に変換しますiterate
foreach
で反復処理してオブジェクトを配列に変換します。 object.cast : <ブール値> (true)
オブジェクトエンコード形式vars
、 array
、またはiterate
使用するときに、オブジェクトから生成された配列の前に(object)
キャストを追加するかどうか。
recursion.detect : <ブール値> (true)
true
に設定すると、エンコーダーは無限ループを回避するために配列およびオブジェクト内の循環参照を検出しようとします。
recursion.ignore : <ブール値> (false)
true
に設定すると、循環参照は例外をスローせずにnull
に置き換えられます。
recursion.max : <整数|偽> (偽)
配列とオブジェクトをエンコードするときの最大レベル数。最大値を超えると例外がスローされます。制限を設けない場合はfalse
に設定します。
このライブラリの著作権は 2013-2022 Riikka Kalliomäki にあります。
ライセンスとコピーの情報については、「ライセンス」を参照してください。