เนมสเปซย่อยในการเขียนโปรแกรมเชิงวัตถุใน PHP

สมมติว่าตอนนี้เรามีสถานการณ์ที่ซับซ้อนมากขึ้น: สำหรับผู้ดูแลระบบจำเป็นต้องสร้างคลาส Page ขึ้นมาสองคลาส - อันแรกสำหรับข้อมูลของเพจ และอันที่สอง - สำหรับการแสดงผล ข้อมูลเหล่านั้น สมมติว่าคลาสแรกอยู่ใน ไฟล์ /admin/data/page.php และคลาสที่สอง - ในไฟล์ /admin/view/page.php

ในบทเรียนก่อนหน้านี้เราได้ตกลงกันแล้วว่าคลาสทั้งหมดจากโฟลเดอร์ admin จะอยู่ในเนมสเปซ ชื่อ Admin อย่างไรก็ตาม ตอนนี้ใน เนมสเปซเดียวกันนี้เรามีความขัดแย้งระหว่างสองคลาส เพื่อแก้ปัญหาสามารถสร้างเนมสเปซย่อย เพิ่มเติมได้ ตัวอย่างเช่น สามารถสร้าง เนมสเปซชื่อ Admin และภายในมีเนมสเปซย่อย Data และ View ในกรณีนี้ ชื่อของเนมสเปซย่อยเหล่านี้จะถูกเขียน ด้วยเครื่องหมายแบ็กสแลช - ทั้งตอนกำหนดเนมสเปซ และตอนสร้างออบเจ็กต์ของคลาส

ควรชี้แจงตรงนี้ว่าจำนวนระดับของการซ้อนกันของ เนมสเปซย่อยนั้นไม่จำกัด (สามารถสร้าง เนมสเปซย่อยภายในเนมสเปซย่อยและ ซ้อนต่อไปเรื่อยๆ ได้)

เอาล่ะ มาลองทำตัวอย่างที่กล่าวมาข้างต้น ให้เสร็จกัน สำหรับคลาส Page จากไฟล์ /admin/data/page.php ให้ระบุเนมสเปซชื่อ Admin\Data:

/admin/data/page.php<?php
  namespace Admin\Data;
  
  class Page
  {
    
  }
?>

สำหรับคลาส Page จากไฟล์ /admin/view/page.php ให้ระบุเนมสเปซชื่อ Admin\View:

/admin/view/page.php<?php
  namespace Admin\View;
  
  class Page
  {
    
  }
?>

มาสร้างออบเจ็กต์ของคลาสของเรากัน:

/index.php<?php
  require_once '/admin/data/page.php';
  require_once '/admin/view/page.php';
  
  $adminDataPage = new \Admin\Data\Page;
  $adminViewPage = new \Admin\View\Page;
?>
Задание 1

สมมติว่าคุณมีโฟลเดอร์ modules/cart ทำให้คลาสทั้งหมดจากโฟลเดอร์นี้ อยู่ในเนมสเปซชื่อ Modules\Cart

Задание 2

สมมติว่าคุณมีโฟลเดอร์ modules/shop/cart/ ทำให้คลาสทั้งหมดจากโฟลเดอร์นี้ อยู่ในเนมสเปซชื่อ Modules\Shop\Cart