네임스페이스 사용 방법을 논의하기 전에 PHP가 사용할 네임스페이스 요소를 어떻게 아는지 이해해야 합니다. PHP 네임스페이스와 파일 시스템을 간단하게 비유할 수 있습니다. 파일 시스템의 파일에 액세스하는 방법에는 세 가지가 있습니다.
foo.txt와 같은 상대 파일 이름 형식. currentdirectory/foo.txt로 구문 분석됩니다. 여기서 currentdirectory는 현재 디렉터리를 나타냅니다. 따라서 현재 디렉터리가 /home/foo이면 파일 이름은 /home/foo/foo.txt로 확인됩니다.
상대 경로 이름 형식은 하위 디렉터리/foo.txt와 같습니다. currentdirectory/subdirectory/foo.txt로 구문 분석됩니다.
절대 경로 이름은 /main/foo.txt 형식입니다. 이는 /main/foo.txt로 구문 분석됩니다.
PHP 네임스페이스의 요소는 동일한 원칙을 사용합니다. 예를 들어, 클래스 이름은
정규화되지 않은 이름 또는 $a=new foo() 또는 foo::staticmethod();와 같은 접두사가 없는 클래스 이름의 세 가지 방법으로 참조될 수 있습니다. 현재 네임스페이스가 currentnamespace이면 foo는 currentnamespacefoo로 확인됩니다. foo를 사용하는 코드가 전역 코드이고 어떤 네임스페이스에도 코드를 포함하지 않는 경우 foo는 foo로 확인됩니다. 경고: 네임스페이스의 함수 또는 상수가 정의되지 않은 경우 정규화되지 않은 함수 또는 상수 이름은 전역 함수 또는 상수 이름으로 확인됩니다.
정규화된 이름 또는 $a = new subnamespacefoo() 또는 subnamespacefoo::staticmethod();와 같은 접두사가 포함된 이름입니다. 현재 네임스페이스가 currentnamespace이면 foo는 currentnamespacesubnamespacefoo로 확인됩니다. foo를 사용하는 코드가 전역 코드인 경우, 어떤 네임스페이스에도 포함되지 않은 코드인 foo는 subnamespacefoo로 확인됩니다.
정규화된 이름 또는 전역 접두사 연산자가 포함된 이름(예: $a = new currentnamespacefoo(); 또는 currentnamespacefoo::staticmethod();). 이 경우 foo는 항상 코드에서 리터럴 이름 currentnamespacefoo로 확인됩니다.
다음은 이 세 가지 방법을 사용한 예입니다.
file1.php:
<?php namespace Foo\Bar\subnamespace; const FOO = 1; function foo() {} class foo { static function staticmethod() {} } ?>
file2.php:
<?php namespace Foo\Bar; include 'file1.php'; const FOO = 2; function foo() {} class foo { static function staticmethod() {} } /* 非限定名称 */ foo(); // 解析为 Foo\Bar\foo resolves to function Foo\Bar\foo foo::staticmethod(); // 解析为类 Foo\Bar\foo的静态方法staticmethod。 echo FOO; // resolves to constant Foo\Bar\FOO /* 限定名称 */ subnamespace\foo(); // 解析为函数 Foo\Bar\subnamespace\foo subnamespace\foo::staticmethod(); // 解析为类 Foo\Bar\subnamespace\foo,以及类的方法 staticmethod echo subnamespace\FOO; // 解析为常量 Foo\Bar\subnamespace\FOO /* 完全限定名称 */ \Foo\Bar\foo(); // 解析为函数 Foo\Bar\foo \Foo\Bar\foo::staticmethod(); // 解析为类 Foo\Bar\foo, 以及类的方法 staticmethod echo \Foo\Bar\FOO; // 解析为常量 Foo\Bar\FOO ?>
참고 전역 클래스, 함수 또는 상수에 액세스하려면 strlen(), Exception 또는 INI_ALL과 같은 정규화된 이름을 사용할 수 있습니다.
예제 #1 네임스페이스 내의 전역 클래스, 함수 및 상수에 액세스
<?php namespace Foo; function strlen() {} const INI_ALL = 3; class Exception {} $a = \strlen('hi'); // 调用全局函数strlen $b = \INI_ALL; // 访问全局常量 INI_ALL $c = new \Exception('error'); // 实例化全局类 Exception ?>