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 parser written in PHP. Its purpose is to simplify static code analysis and
manipulation.
[**Documentation for version 5.x**][doc_master] (current; for running on PHP >= 7.4; for parsing PHP 7.0 to PHP 8.3, with limited support for parsing PHP 5.x).
[Documentation for version 4.x][doc_4_x] (supported; for running on PHP >= 7.0; for parsing PHP 5.2 to PHP 8.3).
Features
--------
The main features provided by this library are:
* Parsing PHP 7, and PHP 8 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.
* 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())->createForNewestSupportedVersion();
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(
attrGroups: array(
)
byRef: false
name: Identifier(
name: test
)
params: array(
0: Param(
attrGroups: array(
)
flags: 0
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(
name: var_dump
)
args: array(
0: Arg(
name: null
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(
attrGroups: array(
)
byRef: false
name: Identifier(
name: test
)
params: array(
0: Param(
attrGroups: array(
)
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)
* Emulation
* Tokens, positions and 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_4_x]: https://github.com/nikic/PHP-Parser/tree/4.x/doc
[doc_master]: https://github.com/nikic/PHP-Parser/tree/master/doc
没有合适的资源?快使用搜索试试~ 我知道了~
PHP-Parser-master.zip
共265个文件
php:261个
php-parse:1个
json:1个
0 下载量 64 浏览量
2024-03-22
10:35:32
上传
评论
收藏 253KB ZIP 举报
温馨提示
这是一个用PHP编写的PHP解析器,其目的是简化静态代码分析和操作。
资源推荐
资源详情
资源评论
收起资源包目录
PHP-Parser-master.zip (265个子文件)
composer.json 843B
LICENSE 1KB
README.md 6KB
Php8.php 177KB
Php7.php 175KB
PrettyPrinterAbstract.php 68KB
Standard.php 51KB
ParserAbstract.php 49KB
NodeTraverser.php 10KB
BuilderFactory.php 10KB
NodeDumper.php 10KB
NameContext.php 10KB
NameResolver.php 10KB
BuilderHelpers.php 10KB
TokenPolyfill.php 9KB
ConstExprEvaluator.php 9KB
TokenStream.php 9KB
Name.php 8KB
Emulative.php 8KB
Comment.php 7KB
NodeAbstract.php 5KB
Differ.php 5KB
String_.php 5KB
Error.php 5KB
ClassMethod.php 5KB
PhpVersion.php 4KB
Lexer.php 4KB
TraitUseAdaptation.php 4KB
NodeVisitor.php 4KB
Class_.php 4KB
Node.php 4KB
Property.php 4KB
ClassConst.php 4KB
Param.php 4KB
Method.php 4KB
JsonDecoder.php 3KB
Enum_.php 3KB
Class_.php 3KB
ClassLike.php 3KB
Closure.php 3KB
CommentAnnotatingVisitor.php 3KB
Function_.php 3KB
PrintableNewAnonClassNode.php 3KB
Interface_.php 3KB
Param.php 3KB
NodeFinder.php 3KB
ArrowFunction.php 2KB
Int_.php 2KB
Trait_.php 2KB
Property.php 2KB
compatibility_tokens.php 2KB
NullsafeTokenEmulator.php 2KB
Modifiers.php 2KB
ClassConst.php 2KB
Float_.php 2KB
EnumCase.php 2KB
Identifier.php 2KB
FunctionLike.php 2KB
KeywordEmulator.php 2KB
Foreach_.php 2KB
PrettyPrinter.php 2KB
Function_.php 2KB
UseItem.php 2KB
TraitUse.php 2KB
Enum_.php 2KB
ExplicitOctalEmulator.php 2KB
AttributeEmulator.php 1KB
ParserFactory.php 1KB
Use_.php 1KB
For_.php 1KB
NodeConnectingVisitor.php 1KB
If_.php 1KB
Interface_.php 1KB
NullsafeMethodCall.php 1KB
Arg.php 1KB
Alias.php 1KB
StaticCall.php 1KB
Use_.php 1KB
MethodCall.php 1KB
Declaration.php 1KB
FirstFindingVisitor.php 1KB
ArrayItem.php 1KB
FullyQualified.php 1KB
Relative.php 1KB
EnumCase.php 1KB
FindingVisitor.php 1KB
Catch_.php 1KB
New_.php 1KB
BinaryOp.php 1KB
Namespace_.php 1KB
PropertyItem.php 1KB
Trait_.php 1KB
GroupUse.php 1KB
Precedence.php 1KB
TryCatch.php 1KB
StaticPropertyFetch.php 1014B
ReverseEmulator.php 1013B
StaticVar.php 999B
FuncCall.php 994B
DeclareItem.php 992B
共 265 条
- 1
- 2
- 3
资源评论
神气仙人
- 粉丝: 2072
- 资源: 101
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功