Subespaços de nomes na OOP em PHP
Suponha que agora temos uma situação mais complexa:
para o administrador, precisamos criar duas classes Page
- uma com os dados da página e a outra - com a visualização
desses dados. Suponha que a primeira classe esteja
no arquivo /admin/data/page.php, e a segunda
- no arquivo /admin/view/page.php.
Nas lições anteriores, já decidimos que todas as classes da pasta
admin pertencerão ao espaço de nomes
Admin. No entanto, agora neste
mesmo espaço de nomes, temos um conflito entre duas classes.
Para resolver o problema, podemos criar subespaços de nomes
adicionais. Por exemplo, podemos criar o
espaço de nomes Admin e, dentro dele, os subespaços
Data e View. Nesse caso,
os nomes desses subespaços são simplesmente escritos
com uma barra invertida - tanto ao definir o espaço de nomes
quanto ao criar um objeto da classe.
Vale esclarecer aqui que o nível de aninhamento dos subespaços não é limitado (é possível criar subsubespaços dentro de subespaços e assim por diante).
Então, vamos finalizar nosso exemplo descrito acima.
Para a classe Page do arquivo /admin/data/page.php,
especificaremos o espaço de nomes Admin\Data:
<?php
namespace Admin\Data;
class Page
{
}
?>
Para a classe Page do arquivo /admin/view/page.php,
especificaremos o espaço de nomes Admin\View:
<?php
namespace Admin\View;
class Page
{
}
?>
Vamos criar objetos das nossas classes:
<?php
require_once '/admin/data/page.php';
require_once '/admin/view/page.php';
$adminDataPage = new \Admin\Data\Page;
$adminViewPage = new \Admin\View\Page;
?>
Suponha que você tenha a pasta modules/cart.
Faça com que todas as classes desta pasta
pertençam ao espaço de nomes
Modules\Cart.
Suponha que você tenha a pasta modules/shop/cart/.
Faça com que todas as classes desta pasta
pertençam ao espaço de nomes
Modules\Shop\Cart.