Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP 네임스페이스 앨리어싱과 임포트: use 연산자 완벽 정리

개요

네임스페이스(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;
//
//
}
?>

또한 includerequire로 포함된 파일은 부모 파일의 임포트 규칙을 상속받지 않습니다. 임포트는 파일 단위로 독립적으로 적용되므로, 각 파일마다 필요한 use 문을 개별적으로 선언해야 한다는 점을 유의하세요.