先說結(jié)果,沒有成功棒旗,已經(jīng)提了issue:https://github.com/nikic/PHP-Parser/issues/731
代碼如下:
$code = <<<'CODE'
<?php
namespace Name\Space;
class SomeClass
{
protected function check($orderData)
{
if ($result) {
}
}
}
CODE;
// 1.將php源代碼轉(zhuǎn)成ast
$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
try {
$ast = $parser->parse($code);
} catch (Error $error) {
echo "Parse error: {$error->getMessage()}\n";
return;
}
$traverser = new NodeTraverser;
// 2. 修改if子句
$traverser->addVisitor(new class extends NodeVisitorAbstract {
public function leaveNode(Node $node) {
if ($node instanceof If_) {
$node->stmts = [
(new BuilderFactory)->var('foo')
];
}
}
});
$traverser->traverse($ast);
// 3. 輸出php代碼
$prettyPrinter = new PrettyPrinter\Standard();
echo $prettyPrinter->prettyPrintFile($ast);
}
最后生成的代碼如下
<?php
namespace Name\Space;
class SomeClass
{
protected function check($orderData)
{
if ($result) {
$foo
}
}
}
可以看到$foo變量后面的分號丟掉了...