繁体   English   中英

使用 nikic/PHP-Parser 将节点插入 PHP AST

[英]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 Node\Stmt\Return_ && $node->expr !== null) {
        // Convert "return foo();" into "$retval = foo(); return $retval;"
        $var = new Node\Expr\Variable('retval');
        return [
            new Node\Stmt\Expression(new Node\Expr\Assign($var, $node->expr)),
            new Node\Stmt\Return_($var),
        ];
    }
}

请参阅修改 AST 中的最后一节

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM