Anizoptera CMF PHP 코드 생성 (덤프, 직렬화) 구성 요소.
https://github.com/anizoptera/azaphpgen
복잡한 배열, 객체, 클로저 및 기본 데이터 유형을 PHP 코드로 덤프 할 수 있습니다. 부분적으로 이것은 일종의 직렬화라고 할 수 있습니다. 덤프 된 PHP 코드를 원하는대로 사용자 정의 할 수 있습니다.
코드 컴파일에 매우 유용합니다 (보통 캐싱 목적).
특징:
var_export() 에 대한 혜택 :
var_export 폐쇄 덤프를 지원하지 않습니다.var_export __set_state function을 가진 객체 만 지원합니다. Azaphpgen은 모든 직렬화 가능한 객체를 지원합니다.iterator_to_array 를 통해);var_export 사용하기가 어색하고 쉽게 손상 될 수있는 매우 추악한 코드를 생성합니다.var_export 네임 스페이스에서 평가할 수없는 코드를 생성합니다.IPhpGenerable 인터페이스로 덤핑하는 객체를 완전히 제어 할 수 있습니다.var_export 그것을 출력하지 않습니다 :)AzaphPgen을 설치하는 권장 방법은 작곡가를 통해입니다. Packagist에 대한 패키지 정보를 볼 수 있습니다.
{
"require" : {
"aza/phpgen" : " ~1.0 "
}
}예제/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 인터페이스 사용량의 가장 간단한 변형의 경우 번들 클래스 - 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]; 결과 코드 사용자 정의의 두 번째 변형 - 클래스에 대한 정의 된 핸들러 (Hooks)의 사용. 이렇게하면 가능한 클래스의 덤프를 사용자 정의 할 수 있습니다!
// 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 라이센스에 따라 릴리스.