บทนำ
สามารถสร้าง Namespace ภายใน Namespace ได้ (Sub-namespaces) เหมือน Directory ใน File System มีโครงสร้างแบบลำดับชั้น (Hierarchical) ใช้ Backslash \ คั่นระหว่างระดับ
ตัวอย่าง Sub-namespaces
Top-level namespace myspace มี Sub-namespaces space1 และ space2 เข้าถึงฟังก์ชัน/คลาสใน Sub-namespace ด้วยคีย์เวิร์ด use:
<?php
namespace myspace\space1;
function hello() {
echo "Hello World from space1\n";
}
namespace myspace\space2;
function hello() {
echo "Hello World from space2\n";
}
use myspace\space1;
hello(); // เรียก space1\hello()
use myspace\space2;
hello(); // เรียก space2\hello() - ทับซ้อน space1
?>
ผลลัพธ์
Hello World from space2 Hello World from space2
หมายเหตุ: คำสั่ง use ตัวหลังจะ Override ตัวก่อน หากชื่อ Function/Class ชื่อเดียวกัน
การเข้าถึงแบบ Explicit
เพื่อความชัดเจน ควรใช้ Fully Qualified Name หรือ Alias:
<?php
namespace myspace\space1;
function hello() { echo "space1\n"; }
namespace myspace\space2;
function hello() { echo "space2\n"; }
namespace myspace\space3;
use myspace\space1;
use myspace\space2 as space2;
space1\hello(); // space1
space2\hello(); // space2 (ใช้ alias)
?>
Best Practices
- ใช้ PSR-4: Namespace ตรงกับ Directory Structure
- Top-level Namespace = Vendor Name (เช่น
App,Vendor\Package) - Sub-namespaces = Feature/Module (เช่น
App\Controller,App\Model\User) - หลีกเลี่ยงชื่อ Sub-namespace ซ้ำกันในระดับต่างๆ
- ใช้
use ... as Aliasเมื่อมีชื่อชนกัน