별칭을 통해 외부 정규화된 이름을 참조하거나 가져올 수 있도록 허용하는 것은 네임스페이스의 중요한 기능입니다. 이는 Unix 계열 파일 시스템에서 다른 파일이나 디렉터리에 대한 기호 링크를 만드는 방법과 다소 유사합니다.
PHP 네임스페이스는 별칭 또는 가져오기를 사용하는 두 가지 방법, 즉 클래스 이름에 별칭을 사용하거나 네임스페이스 이름에 별칭을 사용하는 방법을 지원합니다. PHP는 함수나 상수 가져오기를 지원하지 않습니다.
PHP에서는 별칭은 연산자 사용을 통해 구현됩니다. 다음은 세 가지 가능한 가져오기 방법을 모두 사용하는 예입니다.
예 #1 별칭을 가져오거나 사용하려면 use 연산자를 사용하세요.
<?php namespace foo; use My\Full\Classname as Another; // 下面的例子与 use My\Full\NSname as NSname 相同 use My\Full\NSname; // 导入一个全局类 use \ArrayObject; $obj = new namespace\Another; // 实例化 foo\Another 对象 $obj = new Another; // 实例化 My\Full\Classname 对象 NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func $a = new ArrayObject(array(1)); // 实例化 ArrayObject 对象 // 如果不使用 "use \ArrayObject" ,则实例化一个 foo\ArrayObject 对象 ?>
네임스페이스의 이름에 주의하세요(포함). FooBar와 같이 공백 구분 기호가 있는 정규화된 이름과 FooBar와 같이 네임스페이스 구분 기호가 없는 해당 전역 이름의 경우 선행 백슬래시는 필요하지 않으며 가져온 이름이 정규화되어야 하므로 허용되지 않습니다. 현재 이름에 대해 상대 확인이 수행되지 않습니다. 네임스페이스.
작업을 단순화하기 위해 PHP는 한 줄에 여러 use 문도 지원합니다.
예제 #2 한 줄에 여러 use 문을 포함하여 use 연산자를 통해 별칭 가져오기/사용
<?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // 实例化 My\Full\Classname 对象 NSname\subns\func(); // 调用函数 My\Full\NSname\subns\func ?>
컴파일 중에 import 작업이 실행되지만 동적 클래스 이름, 함수 이름 또는 상수 이름은 실행되지 않습니다.
예제 #3 가져오기 및 동적 이름
<?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // 实例化一个 My\Full\Classname 对象 $a = 'Another'; $obj = new $a; // 实际化一个 Another 对象 ?>
또한 가져오기 작업은 정규화되지 않은 이름과 정규화된 이름에만 영향을 미칩니다. 정규화된 이름은 결정적이므로 가져오기의 영향을 받지 않습니다.
예 #4 가져오기 및 정규화된 이름
<?php use My\Full\Classname as Another, My\Full\NSname; $obj = new Another; // 实例化My\Full\Classname类的对象 $obj = new \Another; // 实例化Another类的对象 $obj = new Another\thing; // 实例化My\Full\Classname\thing类的对象 $obj = new \Another\thing; // 实例化Another\thing类的对象 ?>