INSERT node into PHP AST with nikic/PHP-Parser



我使用 https://github.com/nikic/PHP-Parser。想要在 AST 中插入节点时,什么是好的策略?使用遍历器,我可以使用NodeTraverser类轻松更新和删除节点。但是,如何在节点之前"插入"或"在节点之后插入"呢?

示例:遍历 AST 命名空间时,我想在第一个非使用语句之前插入一个Use语句。

我开始使用beforeTraverseafterTraverse来查找数组的索引,但这似乎过于复杂。有什么想法吗?

可以用多个节点替换一个节点。这仅适用于 leaveNode 内部,并且仅当父结构是数组时。

public function leaveNode(Node $node) {
if ($node instanceof NodeStmtReturn_ && $node->expr !== null) {
// Convert "return foo();" into "$retval = foo(); return $retval;"
$var = new NodeExprVariable('retval');
return [
new NodeStmtExpression(new NodeExprAssign($var, $node->expr)),
new NodeStmtReturn_($var),
];
}
}

请参阅Modyfing AST的最后一部分

相关内容

  • 没有找到相关文章

最新更新