gpt4 book ai didi

php - 如何使用 nikic/PHP-Parser 解析和列出所有类方法

转载 作者:行者123 更新时间:2023-12-01 11:28:52 30 4
gpt4 key购买 nike

阅读文档我可以转储收集到的信息,但没有迭代集合以按特定节点类型过滤的示例。

use PhpParser\ParserFactory;
use PhpParser\Error;
$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
try {
$statements = $parser->parse(file_get_contents("SomeClass.php"));
$methods = array_filter($statements, function($statement) {
// some form of filtering for methods
});
} catch (Error $exception) {
echo "parse error ~> ", $exception->getMessage();
}

最佳答案

选项 1 - 简单的节点查找

use PhpParser\{Node, NodeFinder, ParserFactory};

/** Parse file. */
$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
$stmts = $parser->parse(file_get_contents("SomeClass.php"));

/** Traverse. */
$nodeFinder = new NodeFinder();
$methods = $nodeFinder->findInstanceOf($stmts, Node\Stmt\ClassMethod::class);

/** Dump. */
var_dump($methods);

选项 2 - 完整的“节点访问者”机制

use PhpParser\{Node, NodeTraverser, NodeVisitorAbstract, ParserFactory};

/** Filter definition. */
$methods = [];
$traverser = new NodeTraverser();
$traverser->addVisitor(new class extends NodeVisitorAbstract {
function enterNode(Node $node) {
if ($node instanceof Node\Stmt\ClassMethod) {
global $methods;
$methods[] = $node;
return NodeTraverser::DONT_TRAVERSE_CHILDREN;
}
}
});

/** Parse file. */
$parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
$stmts = $parser->parse(file_get_contents("SomeClass.php"));

/** Traverse using our filter. */
$traverser->traverse($stmts);

/** Dump. */
var_dump( $methods );

关于php - 如何使用 nikic/PHP-Parser 解析和列出所有类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38748078/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com