Névterek alnévtereinek használata az OOP-ban PHP-ben

Tegyük fel, hogy most egy bonyolultabb helyzet áll előttünk: az admin számára két Page osztályt kell készíteni - az egyik az oldal adataival, a másik pedig ezen adatok megjelenítéséért felelős. Tegyük fel, hogy az első osztály a /admin/data/page.php fájlban található, a második pedig a /admin/view/page.php fájlban.

Az előző leckékben már eldöntöttük, hogy a admin mappából származó összes osztály a Admin névtérhez fog tartozni. Most azonban ebben a névtérben két osztály neve ütközik. A probléma megoldására további alnévtereket hozhatunk létre. Például létrehozhatjuk a Admin névteret, és annak Data és View alnévtereit. Ebben az esetben ezen alnévterek neveit egyszerűen a backslash karakterrel választjuk el - mind a névtér megadásakor, mind az osztály példányosításakor.

Itt érdemes megjegyezni, hogy az alnévterek beágyazási szintje korlátlan (lehetőség van al-alnévterek létrehozására alnévtereken belül, és így tovább).

Most fejezzük be a fentebb leírt példánkat. A /admin/data/page.php fájlban lévő Page osztály névtereként adjuk meg a Admin\Data-ot:

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

A /admin/view/page.php fájlban lévő Page osztály névtereként adjuk meg a Admin\View-ot:

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

Hozzuk létre osztályaink objektumait:

/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

Tegyük fel, hogy van egy modules/cart mappája. Állítsa be, hogy ebből a mappából származó összes osztály a Modules\Cart névtérhez tartozzon.

Задание 2

Tegyük fel, hogy van egy modules/shop/cart/ mappája. Állítsa be, hogy ebből a mappából származó összes osztály a Modules\Shop\Cart névtérhez tartozzon.