mirror of
https://github.com/danog/PHP-Parser.git
synced 2024-11-26 20:04:48 +01:00
6aaa87f143
This fixes the case where the old name is used before the new one is ever used, e.g. when manually constructing nodes, as opposed to parsing them. The previous approach would try to register the alias from OLD to NEW. This would trigger autoloading on NEW and afterwards it would register the alias from OLD to NEW. Afterwards the alias registration which originally triggered the autoload would run, thus redeclaring the class. TL;DR aliases suck, closes #192. |
||
---|---|---|
bin | ||
doc | ||
grammar | ||
lib | ||
test | ||
test_old | ||
.travis.yml | ||
CHANGELOG.md | ||
composer.json | ||
LICENSE | ||
phpunit.xml.dist | ||
README.md | ||
UPGRADE-1.0.md |
PHP Parser
This is a PHP 5.2 to PHP 5.6 parser written in PHP. Its purpose is to simplify static code analysis and manipulation.
Documentation for version 1.x (stable; for running on PHP >= 5.3).
Documentation for version 0.9.x (unsupported; for running on PHP 5.2).
In a Nutshell
The parser turns PHP source code into an abstract syntax tree. For example, if you pass the following code into the parser:
<?php
echo 'Hi', 'World';
hello\world('foo', 'bar' . 'baz');
You'll get a syntax tree looking roughly like this:
array(
0: Stmt_Echo(
exprs: array(
0: Scalar_String(
value: Hi
)
1: Scalar_String(
value: World
)
)
)
1: Expr_FuncCall(
name: Name(
parts: array(
0: hello
1: world
)
)
args: array(
0: Arg(
value: Scalar_String(
value: foo
)
byRef: false
)
1: Arg(
value: Expr_Concat(
left: Scalar_String(
value: bar
)
right: Scalar_String(
value: baz
)
)
byRef: false
)
)
)
)
You can then work with this syntax tree, for example to statically analyze the code (e.g. to find programming errors or security issues).
Additionally, you can convert a syntax tree back to PHP code. This allows you to do code preprocessing (like automatedly porting code to older PHP versions).
Documentation
Component documentation: