Anizoptera CMF CMF PHP Code Generation (DUMP, Serialization) Komponen.
https://github.com/anizoptera/azaphpgen
Memungkinkan untuk membuang array, objek, penutupan, dan tipe data dasar yang kompleks sebagai kode PHP. Sebagian, ini dapat disebut semacam serialisasi. Dan Anda dapat menyesuaikan kode PHP yang Anda inginkan sesuai keinginan.
Sangat berguna untuk kompilasi kode (biasanya untuk tujuan caching).
Fitur:
Manfaat lebih dari var_export() :
var_export tidak mendukung penutupan penutupan;var_export hanya mendukung objek dengan fungsi __set_state . Azaphpgen mendukung semua objek yang dapat di -serial;iterator_to_array );var_export menghasilkan kode yang sangat jelek yang canggung untuk digunakan dan dapat dengan mudah rusak;var_export menghasilkan kode yang tidak dapat dievaluasi di namespace;IPhpGenerable ;var_export tidak pernah mengeluarkannya :)Cara yang disarankan untuk menginstal Azaphpgen adalah melalui komposer. Anda dapat melihat informasi paket tentang Packagist.
{
"require" : {
"aza/phpgen" : " ~1.0 "
}
}Anda dapat menggunakan contoh/contoh.php untuk menjalankan semua contoh.
// 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 memperlakukan semua objek yang dapat dilalui sebagai array (dengan iterator_to_array).
$ var = new SplFixedArray ( 3 );
$ var [ 0 ] = ' a ' ;
$ var [ 1 ] = ' b ' ;
echo $ phpGen -> getCodeNoFormat ( $ var ) . PHP_EOL ; // ["a","b",null]; Peringatan: Penutupan dibuang apa adanya. Jadi penutupan yang kompleks tidak didukung:
$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";
},
];
*/ Anda dapat menyesuaikan pembuangan kelas Anda dengan mengimplementasikan antarmuka 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]; Untuk varint paling sederhana dari penggunaan antarmuka IPhpGenerable , Anda dapat menggunakan kelas bundel - CustomCode . Hanya mengambil kode yang diperlukan sebagai argumen konstruktor.
$ 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]; Varint kedua dari kustomisasi kode yang dihasilkan - Penggunaan penangan (kait) yang ditentukan untuk kelas. Dengan cara ini Anda dapat menyesuaikan dump dari kelas yang mungkin!
// 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 memiliki banyak pilihan. Jadi sangat mudah untuk mengonfigurasi kode yang Anda hasilkan untuk kebutuhan khusus Anda (gaya kode misalnya). Anda dapat melihat semua opsi yang tersedia dalam kode kelas 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",
),
),
);
*/ Tes berada di folder Tests dan mencapai 100%-COVE-COMPOPLOGE. Untuk menjalankannya, Anda membutuhkan phpunit. Contoh:
$ phpunit --configuration phpunit.xml.dist
Atau dengan laporan pertanggungan:
$ phpunit --configuration phpunit.xml.dist --coverage-html code_coverage/
Azaphpgen adalah bagian dari Anizoptera CMF, yang ditulis oleh Amal Samally (Amal.Samally di Gmail.com) dan tim Azagroup.
Dirilis di bawah lisensi MIT.