[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-8122":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":30,"readmeContent":31,"aiSummary":32,"trendingCount":16,"starSnapshotCount":16,"syncStatus":33,"lastSyncTime":34,"discoverSource":35},8122,"PHP-Parser","nikic\u002FPHP-Parser","nikic","A PHP parser written in PHP","",null,"PHP",17439,1122,211,47,0,3,16,1,72.25,"BSD 3-Clause \"New\" or \"Revised\" License",false,"master",true,[26,27,28,29],"ast","parser","php","static-analysis","2026-06-12 04:00:37","PHP Parser\n==========\n\n[![Coverage Status](https:\u002F\u002Fcoveralls.io\u002Frepos\u002Fgithub\u002Fnikic\u002FPHP-Parser\u002Fbadge.svg?branch=master)](https:\u002F\u002Fcoveralls.io\u002Fgithub\u002Fnikic\u002FPHP-Parser?branch=master)\n\nThis is a PHP parser written in PHP. Its purpose is to simplify static code analysis and\nmanipulation.\n\n[**Documentation for version 5.x**][doc_master] (current; for running on PHP >= 7.4; for parsing PHP 7.0 to PHP 8.4, with limited support for parsing PHP 5.x).\n\n[Documentation for version 4.x][doc_4_x] (supported; for running on PHP >= 7.0; for parsing PHP 5.2 to PHP 8.3).\n\nFeatures\n--------\n\nThe main features provided by this library are:\n\n * Parsing PHP 7, and PHP 8 code into an abstract syntax tree (AST).\n   * Invalid code can be parsed into a partial AST.\n   * The AST contains accurate location information.\n * Dumping the AST in human-readable form.\n * Converting an AST back to PHP code.\n   * Formatting can be preserved for partially changed ASTs.\n * Infrastructure to traverse and modify ASTs.\n * Resolution of namespaced names.\n * Evaluation of constant expressions.\n * Builders to simplify AST construction for code generation.\n * Converting an AST into JSON and back.\n\nQuick Start\n-----------\n\nInstall the library using [composer](https:\u002F\u002Fgetcomposer.org):\n\n    php composer.phar require nikic\u002Fphp-parser\n\nParse some PHP code into an AST and dump the result in human-readable form:\n\n```php\n\u003C?php\nuse PhpParser\\Error;\nuse PhpParser\\NodeDumper;\nuse PhpParser\\ParserFactory;\n\n$code = \u003C\u003C\u003C'CODE'\n\u003C?php\n\nfunction test($foo)\n{\n    var_dump($foo);\n}\nCODE;\n\n$parser = (new ParserFactory())->createForNewestSupportedVersion();\ntry {\n    $ast = $parser->parse($code);\n} catch (Error $error) {\n    echo \"Parse error: {$error->getMessage()}\\n\";\n    return;\n}\n\n$dumper = new NodeDumper;\necho $dumper->dump($ast) . \"\\n\";\n```\n\nThis dumps an AST looking something like this:\n\n```\narray(\n    0: Stmt_Function(\n        attrGroups: array(\n        )\n        byRef: false\n        name: Identifier(\n            name: test\n        )\n        params: array(\n            0: Param(\n                attrGroups: array(\n                )\n                flags: 0\n                type: null\n                byRef: false\n                variadic: false\n                var: Expr_Variable(\n                    name: foo\n                )\n                default: null\n            )\n        )\n        returnType: null\n        stmts: array(\n            0: Stmt_Expression(\n                expr: Expr_FuncCall(\n                    name: Name(\n                        name: var_dump\n                    )\n                    args: array(\n                        0: Arg(\n                            name: null\n                            value: Expr_Variable(\n                                name: foo\n                            )\n                            byRef: false\n                            unpack: false\n                        )\n                    )\n                )\n            )\n        )\n    )\n)\n```\n\nLet's traverse the AST and perform some kind of modification. For example, drop all function bodies:\n\n```php\nuse PhpParser\\Node;\nuse PhpParser\\Node\\Stmt\\Function_;\nuse PhpParser\\NodeTraverser;\nuse PhpParser\\NodeVisitorAbstract;\n\n$traverser = new NodeTraverser();\n$traverser->addVisitor(new class extends NodeVisitorAbstract {\n    public function enterNode(Node $node) {\n        if ($node instanceof Function_) {\n            \u002F\u002F Clean out the function body\n            $node->stmts = [];\n        }\n    }\n});\n\n$ast = $traverser->traverse($ast);\necho $dumper->dump($ast) . \"\\n\";\n```\n\nThis gives us an AST where the `Function_::$stmts` are empty:\n\n```\narray(\n    0: Stmt_Function(\n        attrGroups: array(\n        )\n        byRef: false\n        name: Identifier(\n            name: test\n        )\n        params: array(\n            0: Param(\n                attrGroups: array(\n                )\n                type: null\n                byRef: false\n                variadic: false\n                var: Expr_Variable(\n                    name: foo\n                )\n                default: null\n            )\n        )\n        returnType: null\n        stmts: array(\n        )\n    )\n)\n```\n\nFinally, we can convert the new AST back to PHP code:\n\n```php\nuse PhpParser\\PrettyPrinter;\n\n$prettyPrinter = new PrettyPrinter\\Standard;\necho $prettyPrinter->prettyPrintFile($ast);\n```\n\nThis gives us our original code, minus the `var_dump()` call inside the function:\n\n```php\n\u003C?php\n\nfunction test($foo)\n{\n}\n```\n\nFor a more comprehensive introduction, see the documentation.\n\nDocumentation\n-------------\n\n 1. [Introduction](doc\u002F0_Introduction.markdown)\n 2. [Usage of basic components](doc\u002F2_Usage_of_basic_components.markdown)\n\nComponent documentation:\n\n * [Walking the AST](doc\u002Fcomponent\u002FWalking_the_AST.markdown)\n   * Node visitors\n   * Modifying the AST from a visitor\n   * Short-circuiting traversals\n   * Interleaved visitors\n   * Simple node finding API\n   * Parent and sibling references\n * [Name resolution](doc\u002Fcomponent\u002FName_resolution.markdown)\n   * Name resolver options\n   * Name resolution context\n * [Pretty printing](doc\u002Fcomponent\u002FPretty_printing.markdown)\n   * Converting AST back to PHP code\n   * Customizing formatting\n   * Formatting-preserving code transformations\n * [AST builders](doc\u002Fcomponent\u002FAST_builders.markdown)\n   * Fluent builders for AST nodes\n * [Lexer](doc\u002Fcomponent\u002FLexer.markdown)\n   * Emulation\n   * Tokens, positions and attributes\n * [Error handling](doc\u002Fcomponent\u002FError_handling.markdown)\n   * Column information for errors\n   * Error recovery (parsing of syntactically incorrect code)\n * [Constant expression evaluation](doc\u002Fcomponent\u002FConstant_expression_evaluation.markdown)\n   * Evaluating constant\u002Fproperty\u002Fetc initializers\n   * Handling errors and unsupported expressions\n * [JSON representation](doc\u002Fcomponent\u002FJSON_representation.markdown)\n   * JSON encoding and decoding of ASTs\n * [Performance](doc\u002Fcomponent\u002FPerformance.markdown)\n   * Disabling Xdebug\n   * Reusing objects\n   * Garbage collection impact\n * [Frequently asked questions](doc\u002Fcomponent\u002FFAQ.markdown)\n   * Parent and sibling references\n\n [doc_3_x]: https:\u002F\u002Fgithub.com\u002Fnikic\u002FPHP-Parser\u002Ftree\u002F3.x\u002Fdoc\n [doc_4_x]: https:\u002F\u002Fgithub.com\u002Fnikic\u002FPHP-Parser\u002Ftree\u002F4.x\u002Fdoc\n [doc_master]: https:\u002F\u002Fgithub.com\u002Fnikic\u002FPHP-Parser\u002Ftree\u002Fmaster\u002Fdoc\n","nikic\u002FPHP-Parser 是一个用 PHP 编写的 PHP 代码解析器，旨在简化静态代码分析和操作。其核心功能包括将 PHP 7 和 PHP 8 代码解析成抽象语法树（AST），支持无效代码的部分解析，并提供准确的位置信息。此外，它还支持将 AST 转换回 PHP 代码、遍历和修改 AST、解析命名空间名称以及评估常量表达式。该项目适合需要进行 PHP 代码静态分析、代码生成或代码转换的场景使用。",2,"2026-06-11 03:16:14","top_language"]