개요
PHP에서는 네임스페이스 안에 또 다른 네임스페이스, 즉 하위 네임스페이스(sub-namespace)를 선언할 수 있습니다. 파일 시스템에서 하나의 디렉터리가 여러 하위 디렉터리를 계층 구조로 포함할 수 있는 것처럼, 네임스페이스 역시 동일한 방식으로 계층화할 수 있습니다.
이때 최상위 네임스페이스와 하위 네임스페이스 사이의 관계는 백슬래시(\) 문자로 정의합니다.
기본 문법
namespace 상위네임스페이스\하위네임스페이스;
예제
다음 예제에서 최상위 네임스페이스 myspace는 space1과 space2라는 두 개의 하위 네임스페이스를 포함합니다. 하위 네임스페이스 내부의 함수나 클래스에 접근하려면 먼저 use 키워드를 사용해 해당 네임스페이스를 가져와야 합니다.
<?php
namespace myspace\space1;
function hello() {
echo "Hello World from space1\n";
}
namespace myspace\space2;
function hello() {
echo "Hello World from space2\n";
}
use myspace\space1;
hello();
use myspace\space2;
hello();
?>
출력 결과
위 코드를 실행하면 다음과 같은 출력이 나타납니다.
Hello World from space2
Hello World from space2
출력 결과 해설
namespace myspace\space2; 선언 이후의 모든 코드는 myspace\space2 네임스페이스 블록에 속합니다. 따라서 한정자 없이 호출한 hello()는 항상 현재 활성화된 네임스페이스의 함수로 해석되며, 그 결과 두 번의 호출 모두 space2의 함수가 실행된 것입니다.
만약 space1에 정의된 함수를 호출하고 싶다면 use로 가져온 별칭을 활용해 다음과 같이 작성할 수 있습니다.
use myspace\space1;
space1\hello(); // "Hello World from space1" 출력
이처럼 하위 네임스페이스를 활용하면 대규모 프로젝트에서 클래스와 함수를 체계적으로 분류하고, 이름 충돌 없이 깔끔한 코드 구조를 유지할 수 있습니다.