Enterprise รุ่น
PHPStan — เอกสารอ้างอิงเชิงลึก
โดยสังเขป
หัวข้อที่มีชื่อว่า “โดยสังเขป”- คลาสสาธารณะหนึ่งตัว
EditionBoundaryRuleกฎ PHPStan แบบกำหนดเองเหนือคำสั่งuse - บังคับใช้ลำดับ dependency ของรุ่นแบบทิศทางเดียว Core ไม่มีวัน import Pro หรือ Enterprise Pro ไม่มีวัน import Enterprise
- การละเมิดจะรายงานตัวระบุ
nextpdf.editionBoundaryViolationบนบรรทัดuseที่กระทำผิด - ทำงานเฉพาะในเวลา build เท่านั้น กฎนี้ไม่มีเส้นทางในรันไทม์และไม่มีผลต่อ PDF ที่สร้างขึ้น
- จัดส่งใน
nextpdf/enterpriseการลงทะเบียนใช้การกำหนดค่า PHPStan มาตรฐาน
ความพร้อมใช้งานและการอนุญาตสิทธิ์
หัวข้อที่มีชื่อว่า “ความพร้อมใช้งานและการอนุญาตสิทธิ์”ความสามารถนี้จัดส่งใน NextPDF Enterprise (nextpdf/enterprise) และเปิดใช้งานด้วย envelope ใบอนุญาตระดับ Enterprise เป็นกฎ static-analysis ในเวลา build ที่ไม่มีเส้นทางในรันไทม์ ขอบเขตแพ็กเกจ nextpdf/enterprise เป็นตัวจำกัดสิทธิ์ และมันไม่มีรหัสความสามารถต่อฟีเจอร์แยกต่างหาก Core และ Pro ไม่จัดส่งรายการที่เทียบเท่า เปรียบเทียบรุ่นและขอใบอนุญาต
พื้นผิว Public API
หัวข้อที่มีชื่อว่า “พื้นผิว Public API”ติดตั้งแพ็กเกจ จากนั้นลงทะเบียนกฎในการกำหนดค่า PHPStan
composer require nextpdf/enterprise:^3rules: - NextPDF\Enterprise\PHPStan\EditionBoundaryRule| Symbol | Parameters | Default behavior | Returns | Throws or fails with | Notes |
|---|---|---|---|---|---|
EditionBoundaryRule | None (no constructor arguments) | Stateless PHPStan rule subscribed to use statements | — | Never throws | final; implements PHPStan\Rules\Rule over Use_ |
EditionBoundaryRule::getNodeType() | None | Declares the AST node type the rule subscribes to | string (Use_::class) | Never throws | Standard PHPStan Rule contract method |
EditionBoundaryRule::processNode() | Node $node, Scope $scope | Checks each imported symbol against the prefixes forbidden for the analyzed namespace | list<IdentifierRuleError> (empty when compliant) | Never throws; violations surface as rule errors | Error identifier nextpdf.editionBoundaryViolation |
final class EditionBoundaryRule implements Rule{ public function getNodeType(): string;
public function processNode(Node $node, Scope $scope): array;}สัญญาพฤติกรรม
หัวข้อที่มีชื่อว่า “สัญญาพฤติกรรม”EditionBoundaryRule นำสัญญา PHPStan Rule มาตรฐานไปใช้เหนือ node type Use_ สำหรับแต่ละคำสั่ง use มันเปรียบเทียบ namespace ของไฟล์ที่วิเคราะห์กับ namespace prefix ของสัญลักษณ์ที่ import ทุกตัว และบังคับใช้ลำดับ dependency แบบทิศทางเดียว
| Analyzed namespace | Edition label | Forbidden import prefixes |
|---|---|---|
NextPDF\* sub-namespaces, excluding Pro and Enterprise | Core | NextPDF\Pro\, NextPDF\Enterprise\ |
NextPDF\Pro and NextPDF\Pro\* | Pro | NextPDF\Enterprise\ |
NextPDF\Enterprise and NextPDF\Enterprise\* | Enterprise | None (top tier) |
Any namespace outside NextPDF\ | — | None (unconstrained) |
เมื่อ import ข้ามขอบเขต กฎจะรายงานข้อผิดพลาดภายใต้ตัวระบุ nextpdf.editionBoundaryViolation ยึดกับบรรทัดคำสั่ง use ที่กระทำผิด ข้อความจะระบุสัญลักษณ์ที่ import namespace ที่ import prefix ที่ต้องห้าม และป้ายกำกับรุ่นที่มนุษย์อ่านได้ สัญลักษณ์ที่ import แต่ละตัวจะสร้างข้อผิดพลาดได้มากที่สุดหนึ่งรายการ การจับคู่ prefix จะหยุดที่ prefix ต้องห้ามตัวแรกที่ตรงกัน
การตรวจสอบเป็นแบบ static และให้คำแนะนำ มันรายงานการละเมิดขอบเขตบนคำสั่ง import มันไม่พิสูจน์ว่าโปรแกรมที่วิเคราะห์ถูกต้องในด้านอื่น
กรณีขอบและโหมดความล้มเหลว
หัวข้อที่มีชื่อว่า “กรณีขอบและโหมดความล้มเหลว”- namespace ที่อยู่นอก
NextPDF\และไฟล์ที่ไม่มี namespace จะไม่สร้างข้อผิดพลาด กฎจะคืนค่ารายการว่าง - โค้ดที่ประกาศใน root namespace
NextPDFแบบตรงตัว (ไม่มีส่วน sub-namespace) จะไม่ถูกจำกัด การตรวจจับขอบเขตจับคู่กับ sub-namespaceNextPDF\ - ไฟล์ Enterprise ไม่มีวันถูกทำเครื่องหมายสำหรับการ import สัญลักษณ์ Pro หรือ Core (ขั้นบนสุด โดยการออกแบบ)
- การจับคู่ prefix รับรู้ตัวคั่น namespace อย่าง
NextPDF\Professionalจัดเป็น Core ไม่ใช่ Pro และการ import ภายใต้มันไม่มีวัน false-positive กับ prefixNextPDF\Pro\ - การ import ชื่อตรงตัว
NextPDF\ProหรือNextPDF\Enterpriseโดยไม่มีส่วนเพิ่มเติมจะไม่ถูกทำเครื่องหมาย มีเพียงสัญลักษณ์ภายใต้ prefix เหล่านั้นเท่านั้นที่ตรงกัน - กฎไม่กรองตามชนิดของ import การ import class,
functionและconstภายใต้ prefix ต้องห้ามล้วนถูกรายงานทั้งหมด - การอ้างอิง fully-qualified แบบ inline ที่เขียนโดยไม่มีคำสั่ง
useอยู่นอกขอบเขต ควรใช้ import เพื่อให้ขอบเขตถูกบังคับใช้ - การประกาศ
useแบบกลุ่มจะถูก parse เป็น node typeGroupUseที่ต่างออกไปและอยู่นอกการ subscribeUse_ของกฎ การ import ต่อสัญลักษณ์แบบธรรมดายังคงให้ขอบเขตถูกตรวจสอบ processNode()ไม่มีวัน throw ทุกผลลัพธ์แสดงออกมาเป็นข้อผิดพลาดของกฎ PHPStan หรือผลลัพธ์ว่าง- ไม่ใช่ส่วนประกอบในรันไทม์ มันไม่ดำเนินการเชิงการเข้ารหัสลับ และโหมด FIPS ไม่นำมาใช้
ความสอดคล้อง
หัวข้อที่มีชื่อว่า “ความสอดคล้อง”ไม่มีการกล่าวอ้างความสอดคล้องตามมาตรฐาน นี่คือกฎเครื่องมือสำหรับนักพัฒนาที่บังคับใช้ข้อจำกัดเชิงสถาปัตยกรรมภายใน (การจัดชั้นของรุ่น) ใน downstream build มันนำสัญญาส่วนขยายกฎของ PHPStan ไปใช้ ซึ่งเป็น API ของเครื่องมือภายนอก ไม่ใช่มาตรฐานที่เป็นทางการ กฎนี้ไม่ให้การรับประกันความสอดคล้อง การรับรอง หรือความถูกต้องเกี่ยวกับโค้ดที่วิเคราะห์ มันรายงานเฉพาะการละเมิด edition-boundary import เท่านั้นและให้คำแนะนำ
บันทึกการพัฒนา
หัวข้อที่มีชื่อว่า “บันทึกการพัฒนา”- กฎทำงานภายใน PHPStan ระหว่างการวิเคราะห์ อ่านเฉพาะโครงสร้างของซอร์ส และไม่มีผลต่อ PDF ที่สร้างขึ้นหรือบริการที่นำไปใช้งานใด ๆ
- การลงทะเบียนกฎและการเลือกระดับ PHPStan ยังคงเป็นความรับผิดชอบของผู้ผสานการทำงาน
- คลาสเป็น
finalและไม่มีสถานะ จึงปลอดภัยภายใต้ worker การวิเคราะห์แบบขนานของ PHPStan - ผลลัพธ์การวิเคราะห์เป็น deterministic สำหรับ source tree ที่กำหนด อินพุตเดียวกันให้รายการข้อผิดพลาดเดียวกัน
- มีให้ใช้ตั้งแต่
nextpdf/enterprise2.1.0 สัญญาข้างต้นสะท้อน 3.1.0
ขอบเขตการเผยแพร่
หัวข้อที่มีชื่อว่า “ขอบเขตการเผยแพร่”หน้านี้อธิบายเฉพาะพฤติกรรมที่สังเกตได้จากภายนอกและพื้นผิว Public API ที่รองรับเท่านั้น เส้นทาง namespace ภายใน คลาสตัวช่วย ตารางกลไก ชื่อไฟล์ runbook และ ticket prefix อยู่นอกขอบเขต