PHP Parser
==========
[![Build Status](https://travis-ci.org/nikic/PHP-Parser.svg?branch=master)](https://travis-ci.org/nikic/PHP-Parser) [![Coverage Status](https://coveralls.io/repos/github/nikic/PHP-Parser/badge.svg?branch=master)](https://coveralls.io/github/nikic/PHP-Parser?branch=master)
This is a PHP 5.2 to PHP 7.4 parser written in PHP. Its purpose is to simplify static code analysis and
manipulation.
[**Documentation for version 4.x**][doc_master] (stable; for running on PHP >= 7.0; for parsing PHP 5.2 to PHP 7.4).
[Documentation for version 3.x][doc_3_x] (unsupported; for running on PHP >= 5.5; for parsing PHP 5.2 to PHP 7.2).
Features
--------
The main features provided by this library are:
* Parsing PHP 5 and PHP 7 code into an abstract syntax tree (AST).
* Invalid code can be parsed into a partial AST.
* The AST contains accurate location information.
* Dumping the AST in human-readable form.
* Converting an AST back to PHP code.
* Experimental: Formatting can be preserved for partially changed ASTs.
* Infrastructure to traverse and modify ASTs.
* Resolution of namespaced names.
* Evaluation of constant expressions.
* Builders to simplify AST construction for code generation.
* Converting an AST into JSON and back.
Quick Start
-----------
Install the library using [composer](https://getcomposer.org):
php composer.phar require nikic/php-parser
Parse some PHP code into an AST and dump the result in human-readable form:
```php
<?php
use PhpParser\Error;
use PhpParser\NodeDumper;
use PhpParser\ParserFactory;
$code = <<<'CODE'
<?php
function test($foo)
{
var_dump($foo);
}
CODE;
$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
try {
$ast = $parser->parse($code);
} catch (Error $error) {
echo "Parse error: {$error->getMessage()}\n";
return;
}
$dumper = new NodeDumper;
echo $dumper->dump($ast) . "\n";
```
This dumps an AST looking something like this:
```
array(
0: Stmt_Function(
byRef: false
name: Identifier(
name: test
)
params: array(
0: Param(
type: null
byRef: false
variadic: false
var: Expr_Variable(
name: foo
)
default: null
)
)
returnType: null
stmts: array(
0: Stmt_Expression(
expr: Expr_FuncCall(
name: Name(
parts: array(
0: var_dump
)
)
args: array(
0: Arg(
value: Expr_Variable(
name: foo
)
byRef: false
unpack: false
)
)
)
)
)
)
)
```
Let's traverse the AST and perform some kind of modification. For example, drop all function bodies:
```php
use PhpParser\Node;
use PhpParser\Node\Stmt\Function_;
use PhpParser\NodeTraverser;
use PhpParser\NodeVisitorAbstract;
$traverser = new NodeTraverser();
$traverser->addVisitor(new class extends NodeVisitorAbstract {
public function enterNode(Node $node) {
if ($node instanceof Function_) {
// Clean out the function body
$node->stmts = [];
}
}
});
$ast = $traverser->traverse($ast);
echo $dumper->dump($ast) . "\n";
```
This gives us an AST where the `Function_::$stmts` are empty:
```
array(
0: Stmt_Function(
byRef: false
name: Identifier(
name: test
)
params: array(
0: Param(
type: null
byRef: false
variadic: false
var: Expr_Variable(
name: foo
)
default: null
)
)
returnType: null
stmts: array(
)
)
)
```
Finally, we can convert the new AST back to PHP code:
```php
use PhpParser\PrettyPrinter;
$prettyPrinter = new PrettyPrinter\Standard;
echo $prettyPrinter->prettyPrintFile($ast);
```
This gives us our original code, minus the `var_dump()` call inside the function:
```php
<?php
function test($foo)
{
}
```
For a more comprehensive introduction, see the documentation.
Documentation
-------------
1. [Introduction](doc/0_Introduction.markdown)
2. [Usage of basic components](doc/2_Usage_of_basic_components.markdown)
Component documentation:
* [Walking the AST](doc/component/Walking_the_AST.markdown)
* Node visitors
* Modifying the AST from a visitor
* Short-circuiting traversals
* Interleaved visitors
* Simple node finding API
* Parent and sibling references
* [Name resolution](doc/component/Name_resolution.markdown)
* Name resolver options
* Name resolution context
* [Pretty printing](doc/component/Pretty_printing.markdown)
* Converting AST back to PHP code
* Customizing formatting
* Formatting-preserving code transformations
* [AST builders](doc/component/AST_builders.markdown)
* Fluent builders for AST nodes
* [Lexer](doc/component/Lexer.markdown)
* Lexer options
* Token and file positions for nodes
* Custom attributes
* [Error handling](doc/component/Error_handling.markdown)
* Column information for errors
* Error recovery (parsing of syntactically incorrect code)
* [Constant expression evaluation](doc/component/Constant_expression_evaluation.markdown)
* Evaluating constant/property/etc initializers
* Handling errors and unsupported expressions
* [JSON representation](doc/component/JSON_representation.markdown)
* JSON encoding and decoding of ASTs
* [Performance](doc/component/Performance.markdown)
* Disabling XDebug
* Reusing objects
* Garbage collection impact
* [Frequently asked questions](doc/component/FAQ.markdown)
* Parent and sibling references
[doc_3_x]: https://github.com/nikic/PHP-Parser/tree/3.x/doc
[doc_master]: https://github.com/nikic/PHP-Parser/tree/master/doc
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
goto高性能解密2021.zip (252个子文件)
php-parse.bat 124B
.gitattributes 199B
nginx.htaccess 0B
.htaccess 0B
installed.json 2KB
composer.json 807B
LICENSE 1KB
LICENSE 1KB
README.md 6KB
README.md 1KB
Php5.php 160KB
Php7.php 148KB
index.php 95KB
newFile.php 90KB
PrettyPrinterAbstract.php 56KB
ParserAbstract.php 40KB
Standard.php 37KB
decode.php 27KB
Lexer.php 16KB
ClassLoader.php 13KB
old.php 12KB
NodeTraverser.php 10KB
NameContext.php 10KB
BuilderFactory.php 9KB
ConstExprEvaluator.php 9KB
BuilderHelpers.php 9KB
NameResolver.php 8KB
rebuildParsers.php 8KB
Emulative.php 8KB
TokenStream.php 8KB
Name.php 8KB
NodeDumper.php 7KB
Comment.php 5KB
NodeAbstract.php 5KB
Error.php 5KB
Differ.php 5KB
ClassMethod.php 4KB
TraitUseAdaptation.php 4KB
String_.php 4KB
Node.php 4KB
Tokens.php 4KB
NumericLiteralSeparatorEmulator.php 3KB
Method.php 3KB
JsonDecoder.php 3KB
Class_.php 3KB
Property.php 3KB
Class_.php 3KB
Param.php 2KB
NodeFinder.php 2KB
Closure.php 2KB
LNumber.php 2KB
Function_.php 2KB
Property.php 2KB
ClassLike.php 2KB
ArrowFunction.php 2KB
NodeVisitor.php 2KB
Interface_.php 2KB
PrintableNewAnonClassNode.php 2KB
FunctionLike.php 2KB
DNumber.php 2KB
Param.php 2KB
Identifier.php 2KB
autoload_real.php 2KB
Multiple.php 2KB
Foreach_.php 2KB
ParserFactory.php 2KB
UseUse.php 2KB
TraitUse.php 2KB
ClassConst.php 2KB
Trait_.php 1KB
FnTokenEmulator.php 1KB
Use_.php 1KB
Alias.php 1KB
For_.php 1KB
If_.php 1KB
CoaleseEqualTokenEmulator.php 1KB
FirstFindingVisitor.php 1KB
Use_.php 1KB
FullyQualified.php 1KB
Relative.php 1KB
Function_.php 1KB
MethodCall.php 1KB
StaticCall.php 1KB
FindingVisitor.php 1KB
ArrayItem.php 1KB
BinaryOp.php 1KB
Precedence.php 1KB
Catch_.php 1KB
Interface_.php 1KB
TryCatch.php 1KB
Arg.php 1KB
StaticPropertyFetch.php 1KB
Namespace_.php 1023B
GroupUse.php 1005B
Ternary.php 985B
Const_.php 984B
Declaration.php 984B
ClassConstFetch.php 975B
PropertyProperty.php 968B
PropertyFetch.php 954B
共 252 条
- 1
- 2
- 3
合二码农
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页