Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

กฎการ Resolve ชื่อ Namespace ใน PHP

บทนำ

การปรากฏของ Namespace ในโค้ด PHP จะถูก Resolve ตามกฎต่อไปนี้:

กฎการ Resolve

  1. Unqualified Name (ไม่มี Separator) - หมายถึง Current Namespace เช่น ClassName ใน namespace A\B จะ resolve เป็น A\B\ClassName
  2. Qualified Name (มี Separator) - เช่น myspace\space1 Resolve เป็น Sub-namespace space1 ภายใต้ myspace (Relative)
  3. Fully Qualified Name (ขึ้นต้น \) - เช่น \myspace หรือ \myspace\space1 Resolve เป็น Absolute Namespace
  4. Fully Qualified Names Resolve เป็น Absolute Namespace ตรงๆ เช่น \myspace\space1 → myspace\space1
  5. Global Namespace Prefix - ถ้าอยู่ใน Global Namespace namespace\space1 resolve เป็น space1
  6. Inside Another Namespace - ถ้า namespace\space1 อยู่ใน myspace จะเทียบเท่า myspace\space1
  7. Import Table (use statements) - Segment แรกของ Qualified Name จะถูก Translate ตาม Import Table ของ Class/Namespace
  8. No Import Rule - Current Namespace จะถูก Prepend เข้าไป
  9. แยกตามประเภท - Class-like names ใช้ Class Import Table, Functions ใช้ Function Import Table, Constants ใช้ Constant Import Table
  10. Unqualified Function/Constant - ถ้าไม่มี Import Rule และอยู่นอก Global Namespace จะ Resolve ที่ Runtime: หาใน Current Namespace ก่อน แล้วค่อยหา Global Function

ตัวอย่างการ Resolve

<?php
namespace A\B;

use C\D as E;
use function F\G as funcG;
use const H\I as CONST_I;

// Class resolution
new E();           // → C\D (จาก use)
new \E();          // → E (Global - fully qualified)
new C\D();         // → C\D (qualified - relative to current? No, first segment checked in imports)
new A\B\C();       // → A\B\C (qualified)

// Function resolution
funcG();           // → F\G (จาก use function)
\funcG();          // → funcG (global)
G\funcG();         // → G\funcG (qualified)

// Constant resolution
echo CONST_I;      // → H\I (จาก use const)
echo \CONST_I;     // → CONST_I (global)
echo I\CONST_I;    // → I\CONST_I (qualified)
?>

สรุปลำดับความสำคัญ

  1. Fully Qualified Name (ขึ้นต้น \) - Highest Priority
  2. Import Statements (use)
  3. Current Namespace (สำหรับ Unqualified)
  4. Global Namespace (Fallback สำหรับ Functions/Constants)