Przestrzenie nazw w OOP w PHP

Załóżmy teraz, że mamy bardziej skomplikowaną sytuację: dla administratora trzeba utworzyć dwie klasy Page - jedną z danymi strony, a drugą - z widokiem tych danych. Niech pierwsza klasa znajduje się w pliku /admin/data/page.php, a druga - w pliku /admin/view/page.php.

W poprzednich lekcjach już ustaliliśmy, że wszystkie klasy z folderu admin będą należeć do przestrzeni nazw Admin. Jednak teraz w tej samej przestrzeni mamy konflikt dwóch klas. Dla rozwiązania problemu można utworzyć dodatkowe podprzestrzenie nazw. Na przykład, można utworzyć przestrzeń nazw Admin, a w niej podprzestrzenie Data i View. W takim przypadku nazwy tych podprzestrzeni po prostu zapisuje się przez odwrotny ukośnik - zarówno przy ustalaniu przestrzeni nazw, jak i przy tworzeniu obiektu klasy.

Należy tutaj wyjaśnić, że poziom zagnieżdżenia podprzestrzeni nie jest ograniczony (można tworzyć podpodprzestrzenie w podprzestrzeniach i tak dalej).

A zatem, dokończmy nasz opisany powyżej przykład. Dla klasy Page z pliku /admin/data/page.php ustawmy przestrzeń nazw Admin\Data:

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

Dla klasy Page z pliku /admin/view/page.php ustawmy przestrzeń nazw Admin\View:

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

Utwórzmy obiekty naszych klas:

/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

Załóżmy, że masz folder modules/cart. Spraw, aby wszystkie klasy z tego folderu należały do przestrzeni nazw Modules\Cart.

Задание 2

Załóżmy, że masz folder modules/shop/cart/. Spraw, aby wszystkie klasy z tego folderu należały do przestrzeni nazw Modules\Shop\Cart.