Именни подпространства в ООП в PHP
Нека сега имаме по-сложна ситуация:
за администратора трябва да направим два класа Page
- един с данни на страницата, а вторият - с изглед
на тези данни. Нека първият клас се намира
във файла /admin/data/page.php, а вторият
- във файла /admin/view/page.php.
В предишните уроци вече решихме, че всички класове от папката
admin ще принадлежат към именото
пространство Admin. Обаче, сега в това
също пространство имаме конфликт на два класа.
За решаване на проблема може да се направят допълнителни
именни подпространства. Например, може да се направи
именно пространство Admin, а в него подпространства
Data и View. В такъв случай
имената на тези подпространства просто се записват
через обратна наклонена черта - както при задаване на именото
пространство, така и при създаване на обект от клас.
Тук следва да се уточни, че нивото на влагане на подпространства не е ограничено (може да се създават под подпространства в подпространства и така нататък).
И така, нека доразширим описания по-горе
пример. За класа Page от файла /admin/data/page.php
посочим именно пространство Admin\Data:
<?php
namespace Admin\Data;
class Page
{
}
?>
За класа Page от файла /admin/view/page.php
посочим именно пространство Admin\View:
<?php
namespace Admin\View;
class Page
{
}
?>
Нека създадем обекти от нашите класове:
<?php
require_once '/admin/data/page.php';
require_once '/admin/view/page.php';
$adminDataPage = new \Admin\Data\Page;
$adminViewPage = new \Admin\View\Page;
?>
Нека имате папка modules/cart.
Направете така, че всички класове от тази папка
да принадлежат към именно пространство
Modules\Cart.
Нека имате папка modules/shop/cart/.
Направете така, че всички класове от тази папка
да принадлежат към именно пространство
Modules\Shop\Cart.