ast

Extension exposing PHP 7 abstract syntax tree


php-ast exports the AST internally used by PHP 7.
php-ast is significantly faster than PHP-Parser, because the AST construction is implemented in C.
However, php-ast may only parse code that is syntactically valid on the version of PHP it runs on.

License: BSD-3-Clause

Latest releases

Version Release Download
1.1.3 2025-08-10 ast-1.1.3.tgz
1.1.2 2024-08-10 ast-1.1.2.tgz
1.1.1 2023-11-12 ast-1.1.1.tgz
1.1.0 2022-08-09 ast-1.1.0.tgz
1.0.16 2021-11-27 ast-1.0.16.tgz
Show all releases

Changelog

Version Message
1.1.3 - Fix build against PHP 8.5.
- In version 120, `exit` and `clone` are represented as `AST_CALL` instead of `AST_EXIT` and `AST_CLONE`.
- Added `MODIFIER_PUBLIC_SET`, `MODIFIER_PROTECTED_SET` and `MODIFIER_PRIVATE_SET` asymmetric visibility flags.
- Added `BINARY_PIPE` flag for `AST_BINARY_OP` for `|>` pipe operator.
- Support `(void)` cast via `TYPE_VOID` flag on `AST_CAST`.
1.1.2 - Fix compilation errors in PHP 8.4.
- In version 110, `AST_PARAM` and `AST_PROP_ELEM` nodes have a `hooks` node for property hooks (https://wiki.php.net/rfc/property-hooks)
- In version 110, `AST_CLOSURE` and `AST_ARROW_FUNC` nodes have no `name`.
1.1.1 - Added support for PHP 8.3
- In version 100, `AST_CLASS_CONST_GROUP` nodes have a `type` child node to represent typed class constants.
1.1.0 - Change documentation files to properly namespace attributes as `#[\AllowDynamicProperties]`. The reflection attributes are already correct.
- Deprecated AST versions 50 and 60.
- Drop support for php <= 7.1
- Fix test failures seen in php 8.2.0beta2 due to change to var_export's output format.
- Add support for php 8.2 readonly classes. Add `ast\flags\CLASS_READONLY` constant.
- Add support for php 8.2 `true` type. Add `ast\flags\TYPE_TRUE` constant.
- Fix bug in php 8.2 where ZEND_AST_ARROW_FUNC output did not include the stub `AST_RETURN` node that was included in php 8.1 and below.
1.0.16 - Optimize instantiating properties of ast\Node and ast\Metadata.
- Document that ast\Node implements `#[AllowDynamicProperties]` in php 8.2
Show complete changelog