เนมสเปซย่อยในการเขียนโปรแกรมเชิงวัตถุใน PHP
สมมติว่าตอนนี้เรามีสถานการณ์ที่ซับซ้อนมากขึ้น:
สำหรับผู้ดูแลระบบจำเป็นต้องสร้างคลาส Page ขึ้นมาสองคลาส
- อันแรกสำหรับข้อมูลของเพจ และอันที่สอง - สำหรับการแสดงผล
ข้อมูลเหล่านั้น สมมติว่าคลาสแรกอยู่ใน
ไฟล์ /admin/data/page.php และคลาสที่สอง
- ในไฟล์ /admin/view/page.php
ในบทเรียนก่อนหน้านี้เราได้ตกลงกันแล้วว่าคลาสทั้งหมดจากโฟลเดอร์
admin จะอยู่ในเนมสเปซ
ชื่อ Admin อย่างไรก็ตาม ตอนนี้ใน
เนมสเปซเดียวกันนี้เรามีความขัดแย้งระหว่างสองคลาส
เพื่อแก้ปัญหาสามารถสร้างเนมสเปซย่อย
เพิ่มเติมได้ ตัวอย่างเช่น สามารถสร้าง
เนมสเปซชื่อ Admin และภายในมีเนมสเปซย่อย
Data และ View ในกรณีนี้
ชื่อของเนมสเปซย่อยเหล่านี้จะถูกเขียน
ด้วยเครื่องหมายแบ็กสแลช - ทั้งตอนกำหนดเนมสเปซ
และตอนสร้างออบเจ็กต์ของคลาส
ควรชี้แจงตรงนี้ว่าจำนวนระดับของการซ้อนกันของ เนมสเปซย่อยนั้นไม่จำกัด (สามารถสร้าง เนมสเปซย่อยภายในเนมสเปซย่อยและ ซ้อนต่อไปเรื่อยๆ ได้)
เอาล่ะ มาลองทำตัวอย่างที่กล่าวมาข้างต้น
ให้เสร็จกัน สำหรับคลาส Page จากไฟล์ /admin/data/page.php
ให้ระบุเนมสเปซชื่อ Admin\Data:
<?php
namespace Admin\Data;
class Page
{
}
?>
สำหรับคลาส Page จากไฟล์ /admin/view/page.php
ให้ระบุเนมสเปซชื่อ Admin\View:
<?php
namespace Admin\View;
class Page
{
}
?>
มาสร้างออบเจ็กต์ของคลาสของเรากัน:
<?php
require_once '/admin/data/page.php';
require_once '/admin/view/page.php';
$adminDataPage = new \Admin\Data\Page;
$adminViewPage = new \Admin\View\Page;
?>
สมมติว่าคุณมีโฟลเดอร์ modules/cart
ทำให้คลาสทั้งหมดจากโฟลเดอร์นี้
อยู่ในเนมสเปซชื่อ
Modules\Cart
สมมติว่าคุณมีโฟลเดอร์ modules/shop/cart/
ทำให้คลาสทั้งหมดจากโฟลเดอร์นี้
อยู่ในเนมสเปซชื่อ
Modules\Shop\Cart