Subspații de nume în OOP în PHP
Să presupunem acum că avem o situație mai complexă:
pentru administrator trebuie făcute două clase Page
- una cu datele paginii, iar a doua - cu reprezentarea
acestor date. Să presupunem că prima clasă se află
în fișierul /admin/data/page.php, iar a doua
- în fișierul /admin/view/page.php.
În lecțiile anterioare am stabilit deja că toate clasele din directorul
admin vor aparține spațiului de nume
Admin. Cu toate acestea, acum în acest
spațiu de nume avem un conflict între două clase.
Pentru a rezolva problema se pot face subspații de nume
suplimentare. De exemplu, se poate face
spațiul de nume Admin, iar în el subspațiile
Data și View. În acest caz
numele acestor subspații se scriu pur și simplu
prin backslash - atât la definirea spațiului de nume,
cât și la crearea obiectului clasei.
Aici trebuie precizat că nivelul de imbricare al subspațiilor nu este limitat (se pot crea subspații în subspații și așa mai departe).
Deci, să finalizăm exemplul nostru descris mai sus.
Pentru clasa Page din fișierul /admin/data/page.php
vom specifica spațiul de nume Admin\Data:
<?php
namespace Admin\Data;
class Page
{
}
?>
Pentru clasa Page din fișierul /admin/view/page.php
vom specifica spațiul de nume Admin\View:
<?php
namespace Admin\View;
class Page
{
}
?>
Să creăm obiectele claselor noastre:
<?php
require_once '/admin/data/page.php';
require_once '/admin/view/page.php';
$adminDataPage = new \Admin\Data\Page;
$adminViewPage = new \Admin\View\Page;
?>
Să presupunem că aveți directorul modules/cart.
Faceți astfel încât toate clasele din acest director
să aparțină spațiului de nume
Modules\Cart.
Să presupunem că aveți directorul modules/shop/cart/.
Faceți astfel încât toate clasele din acest director
să aparțină spațiului de nume
Modules\Shop\Cart.