Namespace Subruimten in OOP in PHP
Stel dat we nu een meer complexe situatie hebben:
voor de admin moeten twee klassen Page gemaakt worden
- één met de paginagegevens, en de tweede - met de weergave
van deze gegevens. Stel dat de eerste klasse zich bevindt
in het bestand /admin/data/page.php, en de tweede
- in het bestand /admin/view/page.php.
In eerdere lessen hebben we al besloten dat alle klassen uit de map
admin zullen behoren tot de namespace
Admin. Maar nu hebben we in dit
zelfde namespace een conflict van twee klassen.
Om het probleem op te lossen kunnen aanvullende
namespace subruimten gemaakt worden. Het is bijvoorbeeld mogelijk om
een namespace Admin te maken, en daarin subruimten
Data en View. In dat geval
worden de namen van deze subruimten eenvoudigweg
geschreven via een backslash - zowel bij het instellen van de namespace
als bij het aanmaken van een object van de klasse.
Hier moet worden verduidelijkt dat het niveau van genestheid van subruimten niet beperkt is (het is mogelijk om sub-subruimten in subruimten te creëren en zo verder).
Laten we dus ons hierboven beschreven
voorbeeld afmaken. Voor de klasse Page uit het bestand /admin/data/page.php
geven we de namespace Admin\Data aan:
<?php
namespace Admin\Data;
class Page
{
}
?>
Voor de klasse Page uit het bestand /admin/view/page.php
geven we de namespace Admin\View aan:
<?php
namespace Admin\View;
class Page
{
}
?>
Laten we objecten van onze klassen aanmaken:
<?php
require_once '/admin/data/page.php';
require_once '/admin/view/page.php';
$adminDataPage = new \Admin\Data\Page;
$adminViewPage = new \Admin\View\Page;
?>
Stel dat je een map modules/cart hebt.
Zorg ervoor dat alle klassen uit deze map
behoren tot de namespace
Modules\Cart.
Stel dat je een map modules/shop/cart/ hebt.
Zorg ervoor dat alle klassen uit deze map
behoren tot de namespace
Modules\Shop\Cart.