PHP의 네임스페이스(namespace)는 PHP 5.3에 추가된 가장 중요한 새로운 기능입니다. 이 개념은 오랫동안 C#에 있었습니다. PHP의 네임스페이스는 실제로 C#과 동일한 개념입니다.
1. PHP의 네임스페이스는 주로 상수, 함수, 클래스라는 세 가지 충돌 문제를 해결합니다.
일반적인 이해: 네임스페이스는 디렉터리를 만들고 외부와 구별하기 위해 디렉터리의 네임스페이스 아래에 코드를 배치하는 것과 같습니다.
/* |--------------------------------- |namespace示例 |@黑眼诗人 <www.chenwei.ws> |--------------------------------- */ namespace myself; function var_dump() { echo 100; } var_dump(); //调用自定义函数(相对路径方式) \myself\var_dump(); //调用自定义函数(绝对路径方式) \var_dump(100); //调用全局的(系统的函数)
참고: 선언()을 제외하고 네임스페이스 앞에는 코드가 있을 수 없습니다. 여러 파일이 동일한 네임스페이스를 사용할 수 있지만 동일한 네임스페이스에 정의된 콘텐츠는 충돌할 수 없습니다. 네임스페이스는 다중 레벨 디렉터리의 개념과 동일한 네임스페이스 owngood와 같은 하위 네임스페이스를 지원합니다.
2. 동일한 파일에 여러 개의 네임스페이스가 존재합니다
1.
/** * 同一文件中若使用了多个命名空间,一般写法 */ namespace nihao\shijie; function demo() { //....... } namespace hello\world; function test() { //........ } \nihao\shijie\demo(); \hello\world\test();
2.
/** * 同一文件中若使用了多个命名空间,建议大括号扩起来 */ namespace nihao\shijie{ function test_one() { //...... }; } namespace hello\world{ function test_two() { //........ } } \nihao\shijie\test_one(); \hello\world\test_two();
동일한 파일에 여러 네임스페이스를 사용하는 것은 여러 PHP 스크립트를 동일한 파일로 병합하는 프로젝트에 주로 사용됩니다. 실제로는 사용하지 않는 것이 좋습니다.
3. 이름 확인 규칙(여러 개념)
1. 정규화되지 않은 이름: 이름에 네임스페이스 구분 기호가 포함되어 있지 않습니다. 예: 내 자신
2. 정규 이름: 이름에는 다음과 같은 네임스페이스 구분 기호가 포함됩니다. nihaoshijie
3. 정규화된 이름: 이름은 구분 기호를 포함하고 네임스페이스 구분 기호로 시작합니다. 예: nihaoshijie(즉, 절대 경로의 개념)