Composant ANIZOPTERA CMF PHP Code Generation (Dump, Serialization).
https://github.com/anizoptera/azaphpgen
Permet de vider des tableaux complexes, des objets, des fermetures et des types de données de base sous forme de code PHP. Cela peut en partie être appelé une sorte de sérialisation. Et vous pouvez personnaliser votre code PHP vidé comme vous le souhaitez.
Il est très utile pour la compilation de code (généralement à des fins de mise en cache).
Caractéristiques:
Avantages sur var_export() :
var_export ne prend pas en charge les fermetures de fermetures;var_export prend en charge uniquement les objets avec la fonction __set_state . Azaphpgen prend en charge tous les objets sérialisables;iterator_to_array );var_export génère un code très laid qui est difficile à utiliser et peut être facilement corrompu;var_export génère du code qui ne peut pas être évalué dans l'espace de noms;IPhpGenerable ;var_export ne le sort jamais :)La façon recommandée d'installer Azaphpgen est via le compositeur. Vous pouvez voir des informations sur le package sur Packagist.
{
"require" : {
"aza/phpgen" : " ~1.0 "
}
}Vous pouvez utiliser des exemples / exemple.php pour exécuter tous les exemples.
// 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 traite tous les objets traversables comme des tableaux (avec iterator_to_array).
$ var = new SplFixedArray ( 3 );
$ var [ 0 ] = ' a ' ;
$ var [ 1 ] = ' b ' ;
echo $ phpGen -> getCodeNoFormat ( $ var ) . PHP_EOL ; // ["a","b",null]; AVERTISSEMENT: les fermetures sont déversées telles quelles. Les fermetures complexes ne sont donc pas prises en charge:
$this utilisation variable; $ 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";
},
];
*/ Vous pouvez personnaliser le vidage de vos classes en implémentant l'interface 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]; Pour la variante la plus simple des usages d'interface IPhpGenerable , vous pouvez utiliser la classe groupée - CustomCode . Il prend simplement le code requis comme argument du constructeur.
$ 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]; Deuxième variante de personnalisation du code résultant - utilisation des gestionnaires définis (crochets) pour les classes. De cette façon, vous pouvez personnaliser le vidage de n'importe quelle classe possible!
// 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 a de nombreuses options. Il est donc très simple de configurer votre code résultant pour vos besoins spéciaux (style de code par exemple). Vous pouvez voir toutes les options disponibles dans le code de classe 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",
),
),
);
*/ Les tests sont dans le dossier Tests et atteignent la couverture de code à 100%. Pour les exécuter, vous avez besoin de phpunit. Exemple:
$ phpunit --configuration phpunit.xml.dist
Ou avec un rapport de couverture:
$ phpunit --configuration phpunit.xml.dist --coverage-html code_coverage/
Azaphpgen fait partie d'Anizoptera CMF, écrite par Amal Samally (Amal.samally sur Gmail.com) et l'équipe Azagroup.
Libéré sous la licence du MIT.