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:
<?php
namespace Admin\Data;
class Page
{
}
?>
Dla klasy Page z pliku /admin/view/page.php
ustawmy przestrzeń nazw Admin\View:
<?php
namespace Admin\View;
class Page
{
}
?>
Utwórzmy obiekty naszych klas:
<?php
require_once '/admin/data/page.php';
require_once '/admin/view/page.php';
$adminDataPage = new \Admin\Data\Page;
$adminViewPage = new \Admin\View\Page;
?>
Załóżmy, że masz folder modules/cart.
Spraw, aby wszystkie klasy z tego folderu
należały do przestrzeni nazw
Modules\Cart.
Załóżmy, że masz folder modules/shop/cart/.
Spraw, aby wszystkie klasy z tego folderu
należały do przestrzeni nazw
Modules\Shop\Cart.