PHP OOP의 네임스페이스
이제 더 복잡한 상황이 있다고 가정해 봅시다:
관리자를 위해 Page 클래스 두 개를 만들어야 합니다.
하나는 페이지 데이터용이고, 다른 하나는 해당 데이터의 표현용입니다.
첫 번째 클래스는 파일 /admin/data/page.php에 있고,
두 번째 클래스는 파일 /admin/view/page.php에 있다고 가정합니다.
이전 강의에서 우리는 admin 폴더의 모든 클래스가
Admin 네임스페이스에 속하기로 결정했습니다.
그러나 이제 이 동일한 네임스페이스 내에서 두 클래스가 충돌합니다.
문제를 해결하기 위해 추가적인 네임스페이스를 만들 수 있습니다.
예를 들어, 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 네임스페이스에 속하도록 만드세요.