이것은 PHP로 작성된 PHP 파서입니다. 그 목적은 정적 코드 분석 및 조작을 단순화하는 것입니다.
버전 5.x에 대한 문서 (현재, PHP >= 7.4에서 실행, PHP 7.0에서 PHP 8.4로 구문 분석, PHP 5.x 구문 분석에 대한 지원이 제한됨).
버전 4.x에 대한 설명서(지원됨, PHP >= 7.0에서 실행 시, PHP 5.2에서 PHP 8.3으로 구문 분석 시)
이 라이브러리가 제공하는 주요 기능은 다음과 같습니다.
PHP 7 및 PHP 8 코드를 추상 구문 트리(AST)로 구문 분석합니다.
잘못된 코드는 부분 AST로 구문 분석될 수 있습니다.
AST에는 정확한 위치 정보가 포함되어 있습니다.
사람이 읽을 수 있는 형식으로 AST를 덤프합니다.
AST를 다시 PHP 코드로 변환합니다.
부분적으로 변경된 AST의 경우 형식이 보존될 수 있습니다.
AST를 탐색하고 수정하기 위한 인프라입니다.
네임스페이스 이름 확인.
상수 표현식의 평가.
코드 생성을 위해 AST 구성을 단순화하는 빌더입니다.
AST를 JSON으로 변환하거나 그 반대로 변환합니다.
작곡가를 사용하여 라이브러리를 설치하십시오.
php composer.phar require nikic/php-parser
일부 PHP 코드를 AST로 구문 분석하고 결과를 사람이 읽을 수 있는 형식으로 덤프합니다.
<?phpuse PhpParserError;use PhpParserNodeDumper;use PhpParserParserFactory;$code = <<<'CODE'<?phpfunction test($foo){ var_dump($foo);}CODE;$parser = (new ParserFactory())->createForNewestSupportedVersion (); 시도 {$ast = $parser->parse($code); } catch (오류 $error) {echo "구문 분석 오류: {$error->getMessage()}n";return; }$dumper = 새로운 NodeDumper;echo $dumper->dump($ast) . "N";
그러면 다음과 같은 AST가 덤프됩니다.
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 ) ) ) ) ) ) )
AST를 탐색하여 일종의 수정을 수행해 보겠습니다. 예를 들어 모든 함수 본문을 삭제합니다.
PhpParserNode 사용; PhpParserNodeStmtFunction_ 사용; PhpParserNodeTraverser 사용; PhpParserNodeVisitorAbstract 사용;$traverser = new NodeTraverser();$traverser->addVisitor(새 클래스 확장 NodeVisitorAbstract {public function enterNode(Node $node) {if ($node instanceof Function_) {// 기능을 정리하세요 body$node->stmts = []; } } });$ast = $traverser->traverse($ast);echo $dumper->dump($ast) . "N";
이는 Function_::$stmts
가 비어 있는 AST를 제공합니다.
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( ) ) )
마지막으로 새 AST를 다시 PHP 코드로 변환할 수 있습니다.
PhpParserPrettyPrinter 사용;$prettyPrinter = new PrettyPrinterStandard;echo $prettyPrinter->prettyPrintFile($ast);
이는 함수 내부의 var_dump()
호출을 제외한 원본 코드를 제공합니다.
<?php함수 테스트($foo) { }
보다 포괄적인 소개를 보려면 설명서를 참조하세요.
소개
기본 구성요소의 사용법
구성요소 문서:
AST 걷기
노드 방문자
방문자의 AST 수정
단락 순회
인터리브된 방문자
간단한 노드 찾기 API
부모 및 형제 참조
이름 확인
이름 확인자 옵션
이름 확인 컨텍스트
예쁜 프린팅
AST를 다시 PHP 코드로 변환
서식 사용자 정의
형식 유지 코드 변환
AST 빌더
AST 노드용 Fluent 빌더
렉서
에뮬레이션
토큰, 위치 및 속성
오류 처리
오류에 대한 열 정보
오류 복구(구문적으로 잘못된 코드 구문 분석)
상수 표현식 평가
상수/속성/기타 이니셜라이저 평가
오류 및 지원되지 않는 표현식 처리
JSON 표현
AST의 JSON 인코딩 및 디코딩
성능
Xdebug 비활성화
객체 재사용
가비지 수집 영향
자주 묻는 질문
부모 및 형제 참조