Namespaces i OOP i PHP
Lad os nu antage, at vi har en mere kompleks situation:
for administratoren skal der laves to klasser Page
- en med sidens data, og den anden - med præsentationen
af disse data. Lad den første klasse være placeret
i filen /admin/data/page.php, og den anden
- i filen /admin/view/page.php.
I de foregående lektioner har vi allerede besluttet, at alle klasser fra mappen
admin vil tilhøre namespacet
Admin. Men nu har vi i dette
samme namespace en konflikt mellem to klasser.
For at løse problemet kan der laves yderligere
undernamespaces. For eksempel kan der laves
namespacet Admin, og i det undernamespacet
Data og View. I sådant tilfælde
skrives navnene på disse undernamespaces blot
gennem omvendt skråstreg - både ved angivelse af namespace
og ved oprettelse af et klasseobjekt.
Her bør det præciseres, at indlejringsniveauet af undernamespaces ikke er begrænset (man kan oprette under-undernamespaces i undernamespaces og så videre).
Så lad os færdiggøre vores ovennævnte
eksempel. For klassen Page fra filen /admin/data/page.php
angiver vi namespacet Admin\Data:
<?php
namespace Admin\Data;
class Page
{
}
?>
For klassen Page fra filen /admin/view/page.php
angiver vi namespacet Admin\View:
<?php
namespace Admin\View;
class Page
{
}
?>
Lad os oprette objekter af vores klasser:
<?php
require_once '/admin/data/page.php';
require_once '/admin/view/page.php';
$adminDataPage = new \Admin\Data\Page;
$adminViewPage = new \Admin\View\Page;
?>
Antag, at du har mappen modules/cart.
Sørg for, at alle klasser fra denne mappe
tilhører namespacet
Modules\Cart.
Antag, at du har mappen modules/shop/cart/.
Sørg for, at alle klasser fra denne mappe
tilhører namespacet
Modules\Shop\Cart.