Именни подпространства в ООП в 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.