Enterprise 에디션
PHPStan — 심층 참조
한눈에 보기
섹션 제목: “한눈에 보기”- 공개 클래스는 하나입니다.
EditionBoundaryRule은use문에 대한 사용자 정의 PHPStan 규칙입니다. - 단방향 에디션 의존성 순서를 시행합니다. Core는 결코 Pro나 Enterprise를 임포트하지 않습니다. Pro는 결코 Enterprise를 임포트하지 않습니다.
- 위반은 위반하는
use줄에서 식별자nextpdf.editionBoundaryViolation을 보고합니다. - 빌드 시점 전용입니다. 이 규칙은 런타임 경로가 없으며 생성되는 PDF에 아무런 영향을 미치지 않습니다.
nextpdf/enterprise에 포함되어 배포됩니다. 등록은 표준 PHPStan 구성을 사용합니다.
가용성 및 라이선싱
섹션 제목: “가용성 및 라이선싱”이 기능은 NextPDF Enterprise(nextpdf/enterprise)에 포함되어 배포되며 Enterprise 등급 라이선스 봉투로 활성화됩니다. 이는 런타임 경로가 없는 빌드 시점 정적 분석 규칙입니다. nextpdf/enterprise 패키지 경계가 이를 게이트하며, 별도의 기능별 기능 코드를 갖지 않습니다. Core와 Pro는 동등한 것을 제공하지 않습니다. 에디션 비교 및 라이선스 받기.
공개 API 표면
섹션 제목: “공개 API 표면”패키지를 설치한 다음, PHPStan 구성에 규칙을 등록하십시오.
composer require nextpdf/enterprise:^3rules: - NextPDF\Enterprise\PHPStan\EditionBoundaryRule| 심볼 | 매개변수 | 기본 동작 | 반환값 | 던지거나 실패하는 경우 | 비고 |
|---|---|---|---|---|---|
EditionBoundaryRule | 없음 (생성자 인자 없음) | use 문에 구독하는 무상태 PHPStan 규칙 | — | 결코 던지지 않음 | final; Use_에 대한 PHPStan\Rules\Rule 구현 |
EditionBoundaryRule::getNodeType() | 없음 | 규칙이 구독하는 AST 노드 유형을 선언 | string (Use_::class) | 결코 던지지 않음 | 표준 PHPStan Rule 계약 메서드 |
EditionBoundaryRule::processNode() | Node $node, Scope $scope | 임포트된 각 심볼을 분석 대상 네임스페이스에 대해 금지된 접두사와 대조 | list<IdentifierRuleError> (준수 시 비어 있음) | 결코 던지지 않음; 위반은 규칙 오류로 표면화 | 오류 식별자 nextpdf.editionBoundaryViolation |
final class EditionBoundaryRule implements Rule{ public function getNodeType(): string;
public function processNode(Node $node, Scope $scope): array;}동작 계약
섹션 제목: “동작 계약”EditionBoundaryRule은 Use_ 노드 유형에 대해 표준 PHPStan Rule 계약을 구현합니다. 각 use 문에 대해 분석 대상 파일의 네임스페이스를 임포트된 모든 심볼의 네임스페이스 접두사와 비교하고 단방향 의존성 순서를 시행합니다.
| 분석 대상 네임스페이스 | 에디션 레이블 | 금지된 임포트 접두사 |
|---|---|---|
NextPDF\* 하위 네임스페이스, Pro 및 Enterprise 제외 | Core | NextPDF\Pro\, NextPDF\Enterprise\ |
NextPDF\Pro 및 NextPDF\Pro\* | Pro | NextPDF\Enterprise\ |
NextPDF\Enterprise 및 NextPDF\Enterprise\* | Enterprise | 없음 (최상위 등급) |
NextPDF\ 밖의 모든 네임스페이스 | — | 없음 (제약 없음) |
임포트가 경계를 넘으면, 규칙은 위반하는 use 문 줄에 고정하여 식별자 nextpdf.editionBoundaryViolation 아래에 오류를 보고합니다. 메시지는 임포트된 심볼, 임포트하는 네임스페이스, 금지된 접두사, 그리고 사람이 읽을 수 있는 에디션 레이블을 명시합니다. 임포트된 각 심볼은 최대 하나의 오류를 생성합니다. 접두사 대조는 일치하는 첫 번째 금지 접두사에서 멈춥니다.
이 검사는 정적이며 권고적입니다. 임포트 문에서 경계 위반을 보고합니다. 분석 대상 프로그램이 그 밖의 면에서 올바름을 증명하지는 않습니다.
엣지 케이스 및 실패 모드
섹션 제목: “엣지 케이스 및 실패 모드”NextPDF\밖의 네임스페이스와 네임스페이스 없는 파일은 오류를 생성하지 않습니다. 규칙은 빈 리스트를 반환합니다.- 정확히 루트 네임스페이스
NextPDF(하위 네임스페이스 세그먼트 없음)에 선언된 코드는 제약되지 않습니다. 경계 감지는NextPDF\하위 네임스페이스에 대해 일치합니다. - Enterprise 파일은 Pro나 Core 심볼을 임포트한다는 이유로 결코 플래그되지 않습니다(최상위 등급, 설계상).
- 접두사 대조는 구분자를 인식합니다.
NextPDF\Professional같은 네임스페이스는 Pro가 아니라 Core로 분류되며, 그 아래의 임포트는NextPDF\Pro\접두사에 대해 결코 오탐하지 않습니다. - 이후 세그먼트 없이 리터럴 이름
NextPDF\Pro나NextPDF\Enterprise를 임포트하는 것은 플래그되지 않습니다. 그 접두사 아래의 심볼만 일치합니다. - 규칙은 임포트 종류로 필터링하지 않습니다. 금지된 접두사 아래의 클래스,
function,const임포트는 모두 보고됩니다. use문 없이 작성된 인라인 완전 정규화 참조는 범위 밖입니다. 경계가 시행되도록 임포트를 선호하십시오.- 그룹
use선언은 별개의GroupUse노드 유형으로 파싱되어 규칙의Use_구독 밖에 있습니다. 심볼별 일반 임포트는 경계 검사를 유지합니다. processNode()는 결코 던지지 않습니다. 모든 결과는 PHPStan 규칙 오류나 빈 결과로 표면화됩니다.- 런타임 컴포넌트가 아닙니다. 어떠한 암호화 연산도 수행하지 않으며 FIPS 모드는 적용되지 않습니다.
적합성
섹션 제목: “적합성”어떠한 표준 적합성도 주장되지 않습니다. 이는 다운스트림 빌드에서 내부 아키텍처 제약(에디션 계층화)을 시행하는 개발자 도구 규칙입니다. 이는 PHPStan 규칙 확장 계약을 구현하며, 이는 형식 표준이 아니라 서드파티 도구 API입니다. 이 규칙은 분석 대상 코드에 대해 어떠한 준수, 인증, 올바름 보장도 하지 않습니다. 에디션 경계 임포트 위반만 보고하며 권고적입니다.
개발 노트
섹션 제목: “개발 노트”- 규칙은 분석 중 PHPStan 내부에서 실행되며, 소스 구조만 읽고, 생성되는 PDF나 배포된 어떠한 서비스에도 영향을 미치지 않습니다.
- 규칙을 등록하고 PHPStan 레벨을 선택하는 것은 통합자의 책임으로 남습니다.
- 클래스는
final이며 무상태이므로, PHPStan의 병렬 분석 워커 하에서 안전합니다. - 분석 출력은 주어진 소스 트리에 대해 결정적입니다. 동일한 입력은 동일한 오류 리스트를 산출합니다.
nextpdf/enterprise2.1.0 이후 사용 가능합니다. 위의 계약은 3.1.0을 반영합니다.
공개 경계
섹션 제목: “공개 경계”이 페이지는 외부에서 관찰 가능한 동작과 지원되는 공개 API 표면만을 문서화합니다. 내부 네임스페이스 경로, 헬퍼 클래스, 메커니즘 테이블, 런북 파일명, 티켓 접두사는 범위 밖입니다.