获取PHP AST节点类型

时间:2018-04-07 20:28:19

标签: php abstract-syntax-tree

设置$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)
      }
    }
  }
}

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";