簡體   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