设置$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 :(得分:1)
如果您知道要查找的节点类型,则可以与给定类型进行比较,即
$node->kind === \ast\AST_ASSIGN
但是,对于常规名称查找,库提供ast\get_kind_name()
(source)。例如:
php > echo \ast\get_kind_name(517);
AST_ASSIGN
如果您想要一种更简单的方法来查看AST,那么库提供了一个util.php
文件(source),其中包含一个转储AST的函数。有关使用它的详细信息,请参见this section中的第一个示例(此处复制)。
require 'path/to/util.php';
echo ast_dump(ast\parse_code('<?php $a=1;', $version=50)), "\n";