跳到內容
getnextpdf.com

Enterprise 版本

PHPStan — 深入參考

  • 一個公開類別:EditionBoundaryRule,一條作用於 use 陳述句之上的自訂 PHPStan 規則。
  • 強制單向的版本依賴順序。Core 絕不匯入 Pro 或 Enterprise。Pro 絕不匯入 Enterprise。
  • 違規會在出問題的那一行 use 上回報識別碼 nextpdf.editionBoundaryViolation
  • 僅在建置期。此規則沒有執行階段路徑,對所產生的 PDF 也沒有任何影響。
  • 隨附於 nextpdf/enterprise。註冊採用標準的 PHPStan 設定。

此能力隨附於 NextPDF Enterprisenextpdf/enterprise),並以 Enterprise 級授權封套啟用。它是一條建置期靜態分析規則,沒有執行階段路徑:由 nextpdf/enterprise 套件邊界閘控,且不帶有獨立的逐功能能力碼。Core 與 Pro 不隨附對等物。比較各版本並取得授權

安裝套件,然後在 PHPStan 設定中註冊此規則。

Terminal window
composer require nextpdf/enterprise:^3
rules:
- NextPDF\Enterprise\PHPStan\EditionBoundaryRule
符號參數預設行為回傳拋出或失敗於備註
EditionBoundaryRule無(無建構子引數)訂閱 use 陳述句的無狀態 PHPStan 規則絕不拋出final;在 Use_ 之上實作 PHPStan\Rules\Rule
EditionBoundaryRule::getNodeType()宣告此規則所訂閱的 AST 節點型別stringUse_::class絕不拋出標準 PHPStan Rule 合約方法
EditionBoundaryRule::processNode()Node $nodeScope $scope依被分析命名空間所禁止的前綴,檢查每個被匯入符號list<IdentifierRuleError>(合規時為空)絕不拋出;違規以規則錯誤形式浮現錯誤識別碼 nextpdf.editionBoundaryViolation
final class EditionBoundaryRule implements Rule
{
public function getNodeType(): string;
public function processNode(Node $node, Scope $scope): array;
}

EditionBoundaryRuleUse_ 節點型別之上實作標準的 PHPStan Rule 合約。對於每個 use 陳述句,它會把被分析檔案的命名空間與每個被匯入符號的命名空間前綴相比較,並強制一個單向的依賴順序。

被分析命名空間版本標籤被禁止的匯入前綴
NextPDF\* 子命名空間,排除 Pro 與 EnterpriseCoreNextPDF\Pro\NextPDF\Enterprise\
NextPDF\ProNextPDF\Pro\*ProNextPDF\Enterprise\
NextPDF\EnterpriseNextPDF\Enterprise\*Enterprise無(最上層)
任何 NextPDF\ 以外的命名空間無(不受約束)

當一次匯入跨越邊界時,規則會以識別碼 nextpdf.editionBoundaryViolation 回報一個錯誤,並錨定在違規的那一行 use 陳述句上。訊息會指名被匯入符號、匯入端命名空間、被禁止的前綴,以及人類可讀的版本標籤。每個被匯入符號最多產生一個錯誤:前綴比對在第一個相符的被禁止前綴處即停止。

此檢查是靜態且諮詢性的。它在匯入陳述句上回報邊界違規。它不證明被分析的程式在其他方面正確。

  • 位於 NextPDF\ 以外的命名空間以及無命名空間的檔案不會產生錯誤;此規則回傳一個空清單。
  • 宣告於正好是根命名空間 NextPDF(沒有子命名空間區段)的程式碼不受約束;邊界偵測比對的是 NextPDF\ 子命名空間。
  • Enterprise 檔案絕不會因匯入 Pro 或 Core 符號而被標記(最上層,乃出於設計)。
  • 前綴比對能辨別分隔符。像 NextPDF\Professional 這樣的命名空間會被歸類為 Core,而非 Pro,其下的匯入也絕不會對 NextPDF\Pro\ 前綴造成誤判。
  • 匯入字面名稱 NextPDF\ProNextPDF\Enterprise 而沒有進一步區段時不會被標記;只有這些前綴之下的符號才會相符。
  • 此規則不依匯入種類過濾:位於被禁止前綴之下的 class、functionconst 匯入全都會回報。
  • 未透過 use、以完整限定名稱內嵌撰寫的參照不在範圍內。請優先使用匯入,使邊界得以被強制執行。
  • 群組 use 宣告會被解析為另一個獨立的 GroupUse 節點型別,落在此規則的 Use_ 訂閱之外;每符號一項的一般匯入則仍受邊界檢查。
  • processNode() 絕不拋出;所有結果都以 PHPStan 規則錯誤或一個空結果浮現。
  • 並非執行階段元件。它不執行任何密碼學運算,且 FIPS 模式不適用。

不主張任何標準一致性。這是一條開發者工具規則,在下游建置中強制執行一項內部架構限制(版本分層)。它實作 PHPStan 規則擴充合約,那是一組第三方工具 API,而非正式標準。此規則對被分析的程式碼不做任何合規、認證或正確性保證;它只回報版本邊界匯入違規,且為諮詢性。

  • 此規則在分析期間於 PHPStan 內部執行,僅讀取原始碼結構,對所產生的 PDF 或任何已部署的服務沒有任何影響。
  • 註冊此規則並選擇 PHPStan 等級,仍是整合者的責任。
  • 此類別為 final 且無狀態,因此在 PHPStan 的平行分析工作者之下是安全的。
  • 對於給定的原始碼樹,分析輸出是確定性的:相同的輸入會產生相同的錯誤清單。
  • nextpdf/enterprise 2.1.0 起提供;上述合約反映的是 3.1.0。

本頁僅記載可從外部觀察到的行為,以及受支援的公開 API 介面。內部命名空間路徑、輔助類別、機制表格、runbook 檔名,以及工單前綴皆不在範圍內。