1
0
mirror of https://github.com/danog/PHP-Parser.git synced 2024-11-26 20:04:48 +01:00
Go to file
Nikita Popov 7ab88416ac Enforce Name|string for names in builders
While array (with name components) could technically be allowed (as
they are supported by the Name node itself), more likely than not
an array would due to incorrect usage of the API (e.g. array instead
of variadics).
2014-12-19 18:50:16 +01:00
bin Add line returns 2014-11-25 19:03:35 -06:00
doc Support fully-qualified and ns-relative names in builders 2014-12-19 18:48:21 +01:00
grammar Disallow new without a class name 2014-09-28 12:41:35 +02:00
lib Enforce Name|string for names in builders 2014-12-19 18:50:16 +01:00
test Enforce Name|string for names in builders 2014-12-19 18:50:16 +01:00
test_old Fix a number of other typos 2014-02-12 17:47:34 +01:00
.travis.yml add PHP 5.6 to .travis.yml 2014-08-29 00:44:47 +09:00
CHANGELOG.md Release PHP-Parser 1.0.2 2014-11-04 23:12:46 +01:00
composer.json Specify autoloader in composer.json 2014-02-06 21:39:57 +01:00
LICENSE fix typos 2011-06-26 18:45:19 +02:00
phpunit.xml.dist fix typo (see also issue 93 already fixed) 2014-02-12 17:39:57 +01:00
README.md Fix apostrophe 2014-12-15 10:05:52 +00:00
UPGRADE-1.0.md Fix typos 2014-09-12 14:44:32 +02:00

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.0.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).

So, that's it, in a nutshell. You can find everything else in the docs.