Ini adalah parser PHP yang ditulis dalam PHP. Tujuannya adalah untuk menyederhanakan analisis dan manipulasi kode statis.
Dokumentasi untuk versi 5.x (saat ini; untuk berjalan di PHP >= 7.4; untuk parsing PHP 7.0 hingga PHP 8.4, dengan dukungan terbatas untuk parsing PHP 5.x).
Dokumentasi untuk versi 4.x (didukung; untuk berjalan di PHP >= 7.0; untuk parsing PHP 5.2 hingga PHP 8.3).
Fitur utama yang disediakan oleh perpustakaan ini adalah:
Parsing kode PHP 7 dan PHP 8 menjadi pohon sintaksis abstrak (AST).
Kode yang tidak valid dapat diurai menjadi AST parsial.
AST berisi informasi lokasi yang akurat.
Membuang AST dalam bentuk yang dapat dibaca manusia.
Mengonversi AST kembali ke kode PHP.
Pemformatan dapat dipertahankan untuk AST yang diubah sebagian.
Infrastruktur untuk melintasi dan memodifikasi AST.
Resolusi nama dengan namespace.
Evaluasi ekspresi konstan.
Pembangun untuk menyederhanakan konstruksi AST untuk pembuatan kode.
Mengubah AST menjadi JSON dan sebaliknya.
Instal perpustakaan menggunakan komposer:
php composer.phar require nikic/php-parser
Parsing beberapa kode PHP ke dalam AST dan buang hasilnya dalam bentuk yang dapat dibaca manusia:
<?phpuse PhpParserError;gunakan PhpParserNodeDumper;gunakan PhpParserParserFactory;$code = <<<'CODE'<?phpfunction test($foo){ var_dump($foo);}CODE;$parser = (new ParserFactory())->createForNewestSupportedVersion ();coba {$ast = $parser->parse($code); } catch (Kesalahan $error) {echo "Kesalahan penguraian: {$error->getMessage()}n";return; }$dumper = NodeDumper baru;echo $dumper->dump($ast) . "N";
Ini membuang AST yang terlihat seperti ini:
array( 0: Stmt_Function( attrGroups: array( ) byRef: false name: Identifier( name: test ) params: array( 0: Param( attrGroups: array( ) flags: 0 type: null byRef: false variadic: false var: Expr_Variable( name: foo ) default: null ) ) returnType: null stmts: array( 0: Stmt_Expression( expr: Expr_FuncCall( name: Name( name: var_dump ) args: array( 0: Arg( name: null value: Expr_Variable( name: foo ) byRef: false unpack: false ) ) ) ) ) ) )
Mari kita melintasi AST dan melakukan beberapa jenis modifikasi. Misalnya, hilangkan semua badan fungsi:
gunakan PhpParserNode;gunakan PhpParserNodeStmtFunction_;gunakan PhpParserNodeTraverser;gunakan PhpParserNodeVisitorAbstract;$traverser = new NodeTraverser();$traverser->addVisitor(kelas baru extends NodeVisitorAbstract {public function enterNode(Node $node) {if ($node instanceof Function_) {// Membersihkan fungsi body$node->stmts = []; } } });$ast = $traverser->traverse($ast);echo $dumper->dump($ast) . "N";
Ini memberi kita AST di mana Function_::$stmts
kosong:
array( 0: Stmt_Function( attrGroups: array( ) byRef: false name: Identifier( name: test ) params: array( 0: Param( attrGroups: array( ) type: null byRef: false variadic: false var: Expr_Variable( name: foo ) default: null ) ) returnType: null stmts: array( ) ) )
Terakhir, kita dapat mengonversi AST baru kembali ke kode PHP:
gunakan PhpParserPrettyPrinter;$prettyPrinter = new PrettyPrinterStandard;echo $prettyPrinter->prettyPrintFile($ast);
Ini memberi kita kode asli, dikurangi panggilan var_dump()
di dalam fungsi:
<?uji fungsi php($foo) { }
Untuk pengenalan yang lebih komprehensif, lihat dokumentasi.
Perkenalan
Penggunaan komponen dasar
Dokumentasi komponen:
Berjalan AST
Pengunjung simpul
Memodifikasi AST dari pengunjung
Lintasan arus pendek
Pengunjung yang disisipkan
API pencarian simpul sederhana
Referensi orang tua dan saudara
Resolusi nama
Opsi penyelesai nama
Konteks resolusi nama
Pencetakan cantik
Mengubah AST kembali ke kode PHP
Menyesuaikan pemformatan
Transformasi kode yang mempertahankan pemformatan
Pembangun AST
Pembangun yang fasih untuk node AST
Lexer
Emulasi
Token, posisi dan atribut
Penanganan kesalahan
Informasi kolom untuk kesalahan
Pemulihan kesalahan (penguraian kode yang salah secara sintaksis)
Evaluasi ekspresi konstan
Mengevaluasi inisialisasi konstan/properti/dll
Menangani kesalahan dan ekspresi yang tidak didukung
Representasi JSON
Pengkodean dan penguraian kode AST dengan JSON
Pertunjukan
Menonaktifkan Xdebug
Menggunakan kembali objek
Dampak pengumpulan sampah
Pertanyaan yang sering diajukan
Referensi orang tua dan saudara