개요
네임스페이스(namespace)의 핵심 기능 중 하나는 별칭(alias)을 사용하여 외부의 완전 한정 이름(fully qualified name)을 참조하는 것입니다. 이를 일반적으로 임포트(import)라고 부릅니다. PHP 네임스페이스는 다음과 같은 종류의 앨리어싱 또는 임포트를 지원합니다.
- 클래스 이름에 별칭 지정
- 인터페이스 이름에 별칭 지정
- 네임스페이스 이름에 별칭 지정
- 함수 및 상수 이름에 별칭 지정 또는 임포트
PHP에서 앨리어싱은 use 연산자를 통해 수행됩니다.
use 연산자 예제
#test1.php
<?php
namespace mynamespace;
function sayhello(){
echo "Hello from mynamespace\n";
}
sayhello();
namespace mynewspace;
function sayhello(){
echo "Hello from my new space\n";
}
sayhello();
use \mynewspace\sayhello as hello;
?>
출력 결과:
Hello from mynamespace
Hello from my new space
use ... as ... 구문을 활용하면 긴 네임스페이스 경로 대신 짧고 직관적인 별칭으로 클래스나 함수를 참조할 수 있어 코드의 가독성과 유지보수성이 크게 향상됩니다.
여러 개의 use 문 결합하기
하나의 use 문에서 쉼표(,)로 구분하면 여러 클래스를 동시에 임포트할 수 있습니다.
예제
<?php
namespace mynamespace;
class myclass{
function test() { echo "myclass in mynamespace\n"; }
}
class testclass{
static function test() { echo "testclass in mynamespace\n"; }
}
use \mynamespace\myclass as myclass, \mynamespace\testclass;
$a=new myclass();
$a->test();
$b=new \mynamespace\testclass();
$b->test();
?>
출력 결과:
myclass in mynamespace
testclass in mynamespace
임포트와 동적 이름
임포트된 클래스 이름은 변수를 통해 동적으로 대체하여 인스턴스를 생성할 수 있습니다.
예제
<?php
namespace mynamespace;
class myclass{
function test() { echo "myclass in mynamespace\n"; }
}
class testclass{
static function test() { echo "testclass in mynamespace\n"; }
}
use \mynamespace\myclass as myclass;
$a=new myclass;
$b='myclass';
$c=new $b;
?>
use 문 사용 시 주의 사항
use 키워드는 반드시 파일의 최상위(전역 범위) 또는 네임스페이스 선언 내부에 위치해야 합니다. 임포트 작업은 런타임이 아닌 컴파일 타임에 처리되기 때문에 블록 범위(block scope)를 가질 수 없습니다. 따라서 아래와 같이 함수 내부에서 use를 선언하는 것은 허용되지 않습니다.
잘못된 사용 예
<?php
function myfunction(){
use myspace\myclass;
//
//
}
?>
또한 include나 require로 포함된 파일은 부모 파일의 임포트 규칙을 상속받지 않습니다. 임포트는 파일 단위로 독립적으로 적용되므로, 각 파일마다 필요한 use 문을 개별적으로 선언해야 한다는 점을 유의하세요.