Download the PHP package nikic/php-ast without Composer

On this page you can find all versions of the php package nikic/php-ast. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package php-ast

php-ast

This extension exposes the abstract syntax tree generated by PHP 7 and 8.

This is the documentation for version 1.x.y. See also documentation for version 0.1.x.

Table of Contents

Installation

Windows: Download a prebuilt Windows DLL and move it into the ext/ directory of your PHP installation. Furthermore, add extension=php_ast.dll to your php.ini file. (The php-ast PECL page also links to the same DLLs for Windows.)

Unix (PECL): Run pecl install ast and add extension=ast.so to your php.ini.

Unix (PIE): Run pie install nikic/ast and add extension=ast.so to your php.ini.

Unix (Compile): Compile and install the extension as follows.

Additionally add extension=ast.so to your php.ini file.

API overview

Defines:

Basic usage

Code can be parsed using either ast\parse_code(), which accepts a code string, or ast\parse_file(), which accepts a file path. Additionally, both functions require a $version argument to ensure forward-compatibility. The current version is 120.

The abstract syntax tree returned by these functions consists of ast\Node objects. ast\Node is declared as follows:

The kind property specifies the type of the node. It is an integral value, which corresponds to one of the ast\AST_* constants, for example ast\AST_STMT_LIST. See the AST node kinds section for an overview of the available node kinds.

The flags property contains node specific flags. It is always defined, but for most nodes it is always zero. See the flags section for a list of flags supported by the different node kinds.

The lineno property specifies the starting line number of the node.

The children property contains an array of child-nodes. These children can be either other ast\Node objects or plain values. There are two general categories of nodes: Normal AST nodes, which have a fixed set of named child nodes, as well as list nodes, which have a variable number of children. The AST node kinds section contains a list of the child names for the different node kinds.

Example

Simple usage example:

The util.php file defines an ast_dump() function, which can be used to create a more compact and human-readable dump of the AST structure:

To additionally show line numbers pass the AST_DUMP_LINENOS option as the second argument to ast_dump().

A more substantial AST dump can be found in the tests.

Metadata

There are a number of functions which provide meta-information for the AST structure:

ast\get_kind_name() returns a string name for an integral node kind.

ast\kind_uses_flags() determines whether the flags of a node kind may ever be non-zero.

ast\get_metadata() returns metadata about all AST node kinds. The return value is a map from AST node kinds to ast\Metadata objects defined as follows.

The kind is the integral node kind, while name is the same name as returned by the get_kind_name() function.

flags is an array of flag constant names, which may be used by the node kind. flagsCombinable specifies whether the flag should be checked using === (not combinable) or using & (combinable). Together these two values provide programmatic access to the information listed in the flags section.

The AST metadata is intended for use in tooling for working the AST, such as AST dumpers.

Flags

This section lists which flags are used by which AST node kinds. The "combinable" flags can be combined using bitwise or and should be checked by using $ast->flags & ast\flags\FOO. The "exclusive" flags are used standalone and should be checked using $ast->flags === ast\flags\BAR.

AST node kinds

This section lists the AST node kinds that are supported and the names of their child nodes.

AST Versioning

The ast\parse_code() and ast\parse_file() functions each accept a required AST $version argument. The idea behind the AST version is that we may need to change the format of the AST to account for new features in newer PHP versions, or to improve it in other ways. Such changes will always be made under a new AST version, while previous formats continue to be supported for some time.

Old AST versions may be deprecated in minor versions and removed in major versions of the AST extension.

A list of currently supported versions is available through ast\get_supported_versions(). The function accepts a boolean argument that determines whether deprecated versions should be excluded.

In the following the changes in the respective AST versions, as well as their current support state, are listed.

120 (current)

Supported since 1.1.3 (TBD).

110 (stable)

Supported since 1.1.2 (2024-08-10).

100 (stable)

Supported since 1.1.1 (2023-11-12).

90 (stable)

Supported since 1.0.14 (2021-07-24)

85 (stable)

Supported since 1.0.11 (2021-04-20)

80 (stable)

Supported since 1.0.10 (2020-09-12).

70 (stable)

Supported since 1.0.1 (2019-02-11).

60 (deprecated)

Supported since 0.1.7 (2018-10-06). Deprecated in php-ast 1.1.0.

50 (deprecated)

Supported since 0.1.5 (2017-07-19). Deprecated in php-ast 1.1.0.

This is the oldest AST version available in 1.0.0. See the 0.1.x AST version changelog for information on changes prior to this version.

Differences to PHP-Parser

Next to php-ast I also maintain the PHP-Parser library, which has some overlap with this extension. This section summarizes the main differences between php-ast and PHP-Parser so you may decide which is preferable for your use-case.

The primary difference is that php-ast is a PHP extension (written in C) which exports the AST internally used by PHP 7 and 8. PHP-Parser on the other hand is library written in PHP. This has a number of consequences:

There are a number of differences in the AST representation and available support code:

The tolerant-php-parser-to-php-ast project can convert the AST produced by tolerant-php-parser (Another pure PHP parser library) into the format used by the php-ast extension. This can be used as a slow fallback in case the php-ast extension is not available. It may also be used to produce a partial php-ast output for code with syntax errors.


All versions of php-ast with dependencies

PHP Build Version
Package Version
Requires php Version >= 7.2.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package nikic/php-ast contains the following files

Loading the files please wait ....