ข้ามไปยังเนื้อหา
getnextpdf.com

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 ไม่จัดส่งรายการที่เทียบเท่า เปรียบเทียบรุ่นและขอใบอนุญาต

ติดตั้งแพ็กเกจ จากนั้นลงทะเบียนกฎในการกำหนดค่า PHPStan

Terminal window
composer require nextpdf/enterprise:^3
rules:
- NextPDF\Enterprise\PHPStan\EditionBoundaryRule
SymbolParametersDefault behaviorReturnsThrows or fails withNotes
EditionBoundaryRuleNone (no constructor arguments)Stateless PHPStan rule subscribed to use statementsNever throwsfinal; implements PHPStan\Rules\Rule over Use_
EditionBoundaryRule::getNodeType()NoneDeclares the AST node type the rule subscribes tostring (Use_::class)Never throwsStandard PHPStan Rule contract method
EditionBoundaryRule::processNode()Node $node, Scope $scopeChecks each imported symbol against the prefixes forbidden for the analyzed namespacelist<IdentifierRuleError> (empty when compliant)Never throws; violations surface as rule errorsError 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 namespaceEdition labelForbidden import prefixes
NextPDF\* sub-namespaces, excluding Pro and EnterpriseCoreNextPDF\Pro\, NextPDF\Enterprise\
NextPDF\Pro and NextPDF\Pro\*ProNextPDF\Enterprise\
NextPDF\Enterprise and NextPDF\Enterprise\*EnterpriseNone (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-namespace NextPDF\
  • ไฟล์ Enterprise ไม่มีวันถูกทำเครื่องหมายสำหรับการ import สัญลักษณ์ Pro หรือ Core (ขั้นบนสุด โดยการออกแบบ)
  • การจับคู่ prefix รับรู้ตัวคั่น namespace อย่าง NextPDF\Professional จัดเป็น Core ไม่ใช่ Pro และการ import ภายใต้มันไม่มีวัน false-positive กับ prefix NextPDF\Pro\
  • การ import ชื่อตรงตัว NextPDF\Pro หรือ NextPDF\Enterprise โดยไม่มีส่วนเพิ่มเติมจะไม่ถูกทำเครื่องหมาย มีเพียงสัญลักษณ์ภายใต้ prefix เหล่านั้นเท่านั้นที่ตรงกัน
  • กฎไม่กรองตามชนิดของ import การ import class, function และ const ภายใต้ prefix ต้องห้ามล้วนถูกรายงานทั้งหมด
  • การอ้างอิง fully-qualified แบบ inline ที่เขียนโดยไม่มีคำสั่ง use อยู่นอกขอบเขต ควรใช้ import เพื่อให้ขอบเขตถูกบังคับใช้
  • การประกาศ use แบบกลุ่มจะถูก parse เป็น node type GroupUse ที่ต่างออกไปและอยู่นอกการ subscribe Use_ ของกฎ การ import ต่อสัญลักษณ์แบบธรรมดายังคงให้ขอบเขตถูกตรวจสอบ
  • processNode() ไม่มีวัน throw ทุกผลลัพธ์แสดงออกมาเป็นข้อผิดพลาดของกฎ PHPStan หรือผลลัพธ์ว่าง
  • ไม่ใช่ส่วนประกอบในรันไทม์ มันไม่ดำเนินการเชิงการเข้ารหัสลับ และโหมด FIPS ไม่นำมาใช้

ไม่มีการกล่าวอ้างความสอดคล้องตามมาตรฐาน นี่คือกฎเครื่องมือสำหรับนักพัฒนาที่บังคับใช้ข้อจำกัดเชิงสถาปัตยกรรมภายใน (การจัดชั้นของรุ่น) ใน downstream build มันนำสัญญาส่วนขยายกฎของ PHPStan ไปใช้ ซึ่งเป็น API ของเครื่องมือภายนอก ไม่ใช่มาตรฐานที่เป็นทางการ กฎนี้ไม่ให้การรับประกันความสอดคล้อง การรับรอง หรือความถูกต้องเกี่ยวกับโค้ดที่วิเคราะห์ มันรายงานเฉพาะการละเมิด edition-boundary import เท่านั้นและให้คำแนะนำ

  • กฎทำงานภายใน PHPStan ระหว่างการวิเคราะห์ อ่านเฉพาะโครงสร้างของซอร์ส และไม่มีผลต่อ PDF ที่สร้างขึ้นหรือบริการที่นำไปใช้งานใด ๆ
  • การลงทะเบียนกฎและการเลือกระดับ PHPStan ยังคงเป็นความรับผิดชอบของผู้ผสานการทำงาน
  • คลาสเป็น final และไม่มีสถานะ จึงปลอดภัยภายใต้ worker การวิเคราะห์แบบขนานของ PHPStan
  • ผลลัพธ์การวิเคราะห์เป็น deterministic สำหรับ source tree ที่กำหนด อินพุตเดียวกันให้รายการข้อผิดพลาดเดียวกัน
  • มีให้ใช้ตั้งแต่ nextpdf/enterprise 2.1.0 สัญญาข้างต้นสะท้อน 3.1.0

หน้านี้อธิบายเฉพาะพฤติกรรมที่สังเกตได้จากภายนอกและพื้นผิว Public API ที่รองรับเท่านั้น เส้นทาง namespace ภายใน คลาสตัวช่วย ตารางกลไก ชื่อไฟล์ runbook และ ticket prefix อยู่นอกขอบเขต