абстрактное синтаксическое дерево — Получить вид узла PHP AST

После настройки $ast = ast\parse_code('<?php $a=1;', $version=50);

Я могу видеть содержимое узла, но хотел точно знать, каким был тип узла. Вывод, который я вижу, просто дает целочисленное значение константы назначенного вида — есть ли способ выяснить, к какому виду это относится (то есть получить имя константы)?

php > var_dump($ast);
object(ast\Node)#1 (4) {
["kind"]=>
int(132)
["flags"]=>
int(0)
["lineno"]=>
int(1)
["children"]=>
array(1) {
[0]=>
object(ast\Node)#2 (4) {
["kind"]=>
int(517)
["flags"]=>
int(0)
["lineno"]=>
int(1)
["children"]=>
array(2) {
["var"]=>
object(ast\Node)#3 (4) {
["kind"]=>
int(256)
["flags"]=>
int(0)
["lineno"]=>
int(1)
["children"]=>
array(1) {
["name"]=>
string(1) "a"}
}
["expr"]=>
int(1)
}
}
}
}

0

Решение

Если вы знаете тип искомого узла, вы можете сравнить его с данным видом, т.е.

$node->kind === \ast\AST_ASSIGN

Однако для общего поиска имени библиотека предоставляет ast\get_kind_name() (источник). Например:

php > echo \ast\get_kind_name(517);
AST_ASSIGN

Если вам нужен более простой способ просмотра AST, библиотека предоставляет util.php файл (источник) с функцией, которая выдает AST. Подробности его использования можно найти ниже первого примера в эта секция (скопировано здесь).

require 'path/to/util.php';
echo ast_dump(ast\parse_code('<?php $a=1;', $version=50)), "\n";
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector