アニゾプテラCMF PHPコード生成(ダンプ、シリアル化)コンポーネント。
https://github.com/anizoptera/azaphpgen
PHPコードとして、複雑な配列、オブジェクト、閉鎖、基本データ型をダンプできます。部分的には、これはある種のシリアル化と呼ぶことができます。そして、あなたが望むようにあなたのダンプされたPHPコードをカスタマイズすることができます。
これは、コードコンピレーションに非常に役立ちます(通常はキャッシュ目的で)。
特徴:
var_export()に対する利点:
var_export閉鎖の投棄をサポートしていません。var_export 、 __set_state関数を持つオブジェクトのみをサポートします。 azaphpgenはすべてのシリアル化可能なオブジェクトをサポートします。iterator_to_array経由);var_export非常にugいコードを生成し、使用するのが厄介で、簡単に破損する可能性があります。var_export 、名前空間では評価できないコードを生成します。IPhpGenerableインターフェイスでダンピングするオブジェクトを完全に制御できます。var_exportそれを出力しません:)Azaphpgenをインストールする推奨方法は、Composerを使用することです。 Packagistに関するパッケージ情報を見ることができます。
{
"require" : {
"aza/phpgen" : " ~1.0 "
}
}Examples/example.phpを使用して、すべての例を実行できます。
// Get singleton instance of PhpGen (fast and simple variant)
$ phpGen = PhpGen:: instance ();
// Integer
echo $ phpGen -> getCode ( 123456789 ) . PHP_EOL ; // 123456789;
// String (binary strings are supported as well)
echo $ phpGen -> getCode ( ' some string ' . ' example ' ) . PHP_EOL ; // "some string example";
// Float without trailing semicolon
echo $ phpGen -> getCodeNoTail ( 12.345 ) . PHP_EOL ; // 12.345
// Simple serializable objects
$ var = new stdClass ();
echo $ phpGen -> getCode ( $ var ) . PHP_EOL ; // unserialize("O:8:"stdClass":0:{}");
// Another object example
$ var = new DateTime ( ' 2013-02-23 00:49:36 ' , new DateTimeZone ( ' UTC ' ));
echo $ phpGen -> getCode ( $ var ) . PHP_EOL ; // unserialize("O:8:"DateTime":3:{s:4:"date";s:19:"2013-02-23 00:49:36";s:13:"timezone_type";i:3;s:8:"timezone";s:3:"UTC";}"); // AzaPhpGen will use short array syntax if possible by default (PHP >= 5.4)
echo $ phpGen -> getCode ( array (
true , false , null
)) . PHP_EOL ;
/*
[
true,
false,
null,
];
*/
// Build code without formatting
echo $ phpGen -> getCodeNoFormat ( array (
true , false , null
)) . PHP_EOL ;
/*
[true,false,null];
*/
// Complex array (some sort of config for example)
$ array = array (
' key1 ' => ' value ' ,
' long_key ' => ' value ' ,
' array ' => array (
' short_value '
),
' array2 ' => array (
' very very very very very very very very very very very very long value '
),
' other ' ,
123456789
);
echo $ phpGen -> getCode ( $ array ) . PHP_EOL ;
/*
[
"key1" => "value",
"long_key" => "value",
"array" => ["short_value"],
"array2" => [
"very very very very very very very very very very very very long value",
],
0 => "other",
1 => 123456789,
];
*/
// And wothout formatting
echo $ phpGen -> getCodeNoFormat ( $ array ) . PHP_EOL ;
/*
["key1"=>"value","long_key"=>"value","array"=>["short_value"],"array2"=>["very very very very very very very very very very very very long value"],0=>"other",1=>123456789];
*/ azaphpgenは、すべてのトラバー可能なオブジェクトを配列として扱います(iterator_to_arrayを使用)。
$ var = new SplFixedArray ( 3 );
$ var [ 0 ] = ' a ' ;
$ var [ 1 ] = ' b ' ;
echo $ phpGen -> getCodeNoFormat ( $ var ) . PHP_EOL ; // ["a","b",null]; 警告:閉鎖はそのまま投棄されます。したがって、複雑な閉鎖はサポートされていません:
$thisでの閉鎖。 $ closure = function ( $ a , $ b ) {
return round ( $ a , $ b ) . " example tn" ;
};
echo $ phpGen -> getCode ( $ closure ) . PHP_EOL ;
/*
function($a, $b) {
return round($a, $b) . "exampletn";
};
*/
echo $ phpGen -> getCode ( array ( ' key ' => $ closure )) . PHP_EOL ;
/*
[
"key" => function($a, $b) {
return round($a, $b) . "exampletn";
},
];
*/ IPhpGenerableインターフェイスを実装することにより、クラスのダンプをカスタマイズできます。
class ExampleCustomCode implements IPhpGenerable
{
public function generateCode ()
{
return ' 32434 + 5678 ' ;
}
}
$ var = new ExampleCustomCode ();
echo $ phpGen -> getCode ( $ var ) . PHP_EOL ; // 32434 + 5678;
echo $ phpGen -> getCode ( array ( $ var )) . PHP_EOL ; // [32434 + 5678]; IPhpGenerableインターフェイスの使用の最もシンプルなVarintの場合、バンドルクラスCustomCodeを使用できます。コンストラクターの引数として必要なコードを取るだけです。
$ var = new CustomCode ( ' "some code" . PHP_EOL ' );
echo $ phpGen -> getCode ( $ var ) . PHP_EOL ; // "some code" . PHP_EOL;
echo $ phpGen -> getCode ( array ( $ var )) . PHP_EOL ; // ["some code" . PHP_EOL]; 結果のコードカスタマイズの2番目のVarint-クラスの定義済みハンドラー(フック)の使用。これにより、可能なクラスのダンプをカスタマイズできます!
// Set custom handler for DateTime type
$ phpGen -> addCustomHandler ( ' DateTime ' , function ( $ data ) use ( $ phpGen ) {
/** @var $data DateTime */
return $ phpGen -> getCodeNoTail (
$ data -> format ( " Y-m-dO " )
);
});
// Build code
$ var = new DateTime ( ' 2013-02-23 00:49:36 ' , new DateTimeZone ( ' UTC ' ));
echo $ phpGen -> getCode ( $ var ) . PHP_EOL ; // "2013-02-23+0000"; azaphpgenには多くのオプションがあります。そのため、特別なニーズに合わせて結果のコードを構成するのは非常に簡単です(たとえばコードスタイル)。 PHPGenクラスコードで利用可能なすべてのオプションを確認できます。
// Disable short array syntax and use 6 spaces for indentation
$ phpGen -> shortArraySyntax = false ;
$ phpGen -> useSpaces = true ;
$ phpGen -> tabLength = 6 ;
$ var = array ( array ( array ( 23 => ' example ' )));
echo $ phpGen -> getCode ( $ var ) . PHP_EOL ;
/*
array(
array(
array(
23 => "example",
),
),
);
*/ テストはTestsフォルダーにあり、100%のコードカバーに到達します。それらを実行するには、phpunitが必要です。例:
$ phpunit --configuration phpunit.xml.dist
またはカバレッジレポートで:
$ phpunit --configuration phpunit.xml.dist --coverage-html code_coverage/
Azaphpgenは、Amal Samally(amal.samally at Gmail.com)およびAzagroupチームによって書かれたAnizoptera CMFの一部です。
MITライセンスの下でリリースされました。