PHPにおけるオブジェクト指向プログラミングの名前空間サブスペース
では、より複雑な状況があるとします:
管理者用に2つの Page クラスが必要です。
1つはページデータ用、もう1つはそのデータの表示用です。
最初のクラスが /admin/data/page.php ファイルにあり、
2番目のクラスが /admin/view/page.php ファイルにあるとします。
前のレッスンですでに、 admin フォルダ内のすべてのクラスは
Admin 名前空間に属すると決定しました。
しかし、今、この同じ名前空間内で2つのクラスが競合しています。
この問題を解決するために、追加の名前空間サブスペースを作成できます。
たとえば、 Admin 名前空間を作成し、
その中に Data と View のサブスペースを作ることができます。
この場合、これらのサブスペースの名前は、
名前空間を定義するときも、クラスのオブジェクトを作成するときも、
バックスラッシュで区切って記述します。
ここで、サブスペースのネストレベルには 制限がないことを明確にしておく必要があります (サブスペース内にさらにサブスペースを作成することができます)。
それでは、上記で説明した例を完成させましょう。
/admin/data/page.php ファイルの Page クラスには、
Admin\Data 名前空間を指定します:
<?php
namespace Admin\Data;
class Page
{
}
?>
/admin/view/page.php ファイルの Page クラスには、
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 名前空間に属するように設定してください。