/** * 得到一个文件基本信息FileSummary,包括路径,基本块,包含的文件等 * @param string $absPath */ public static function getFileSummary($absPath) { if (!$absPath) { return; } $visitor = new MyVisitor(); $parser = new PhpParser\Parser(new PhpParser\Lexer\Emulative()); $traverser = new PhpParser\NodeTraverser(); $code = file_get_contents($absPath); try { $stmts = $parser->parse($code); } catch (Exception $e) { return; } $traverser->addVisitor($visitor); $traverser->traverse($stmts); $nodes = $visitor->getNodes(); $fileSummary = new FileSummary(); $fileSummary->setPath($absPath); $currBlock = new BasicBlock(); foreach ($nodes as $node) { if (!is_object($node)) { continue; } //不分析函数定义 if ($node->getType() == "Stmt_Function") { continue; } $currBlock->addNode($node); } $fileSummaryGenerator = new FileSummaryGenerator(); $fileSummaryGenerator->simulate($currBlock, $fileSummary); return $fileSummary; }