네임스페이스 개요
네임스페이스란 무엇입니까? 광범위하게 말하면 네임스페이스는 사물을 캡슐화하는 방법입니다. 이 추상적인 개념은 여러 곳에서 찾아볼 수 있습니다. 예를 들어 디렉터리는 운영 체제에서 관련 파일을 그룹화하는 데 사용되며 디렉터리에 있는 파일의 네임스페이스 역할을 합니다. 예를 들어, foo.txt 파일은 /home/greg 및 /home/other 디렉토리에 동시에 존재할 수 있지만 두 개의 foo.txt 파일이 동일한 디렉토리에 존재할 수는 없습니다. 또한 /home/greg 디렉터리 외부에서 foo.txt 파일에 액세스할 때 /home/greg/foo.txt를 가져오려면 파일 이름 앞에 디렉터리 이름과 디렉터리 구분 기호를 넣어야 합니다. 이 원칙을 프로그래밍 분야에 적용한 것이 네임스페이스의 개념입니다.
PHP에서 네임스페이스는 클래스 라이브러리나 애플리케이션을 작성할 때 클래스나 함수와 같은 재사용 가능한 코드를 만들 때 발생하는 두 가지 유형의 문제를 해결하는 데 사용됩니다.
사용자가 작성한 코드 이름이 PHP 내부와 충돌합니다. 클래스/함수/상수 또는 타사 클래스/함수/상수.
매우 긴 식별자 이름(일반적으로 첫 번째 유형의 문제를 완화하기 위해 정의됨)에 대한 별칭(또는 짧은) 이름을 만들어 소스 코드의 가독성을 높입니다.
PHP 네임스페이스는 관련 클래스, 함수 및 상수를 그룹화하는 방법을 제공합니다. 다음은 PHP 네임스페이스 구문을 보여주는 예입니다.
예제 #1 네임스페이스 구문 예
<?php namespace my\name; class MyClass {} function myfunction() {} const MYCONST = 1; $a = new MyClass; $c = new \my\name\MyClass; $a = strlen('hi'); $d = namespace\MYCONST; $d = __NAMESPACE__ . '\MYCONST'; echo constant($d); ?>
PHP는 5.3.0 이후 버전부터 네임스페이스를 지원하기 시작합니다.
네임스페이스 정의
모든 합법적인 PHP 코드가 네임스페이스에 포함될 수 있지만 네임스페이스의 영향을 받는 코드 유형은 클래스, 함수, 상수 세 가지뿐입니다.
네임스페이스는 키워드 네임스페이스를 사용하여 선언됩니다. 파일에 네임스페이스가 포함되어 있으면 다른 모든 코드보다 먼저 네임스페이스를 선언해야 합니다.
예제 #1 단일 네임스페이스 선언
<?php namespace MyProject; const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } ?>
네임스페이스를 선언하기 전에 유효한 유일한 코드는 소스 파일 인코딩을 정의하는 데 사용되는 선언문입니다. 또한, 공백을 포함한 모든 비PHP 코드는 네임스페이스 선언 앞에 나타날 수 없습니다:
예제 #2 단일 네임스페이스 선언
<html> <?php namespace MyProject; // 致命错误 - 命名空间必须是程序脚本的第一条语句 ?>
또한 PHP의 다른 언어 기능과 다릅니다. PHP에서는 동일한 네임스페이스를 여러 파일에 정의할 수 있으므로 동일한 네임스페이스의 내용을 나누어 다른 파일에 저장할 수 있습니다.
하위 네임스페이스 정의
디렉터리와 파일 간의 관계와 마찬가지로 PHP 네임스페이스를 사용하면 계층적 네임스페이스 이름을 지정할 수도 있습니다. 따라서 네임스페이스 이름은 계층적 방식으로 정의될 수 있습니다.
예 #1 계층적 단일 네임스페이스 선언
<?php namespace MyProject\Sub\Level; const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } ?>
위의 예에서는 상수 MyProjectSubLevelCONNECT_OK, 클래스 MyProjectSubLevelConnection 및 함수 MyProjectSubLevelConnection을 만듭니다.