섹션 1 네임스페이스 개요
버전 요구 사항
PHP는 버전 5.3.0부터 네임스페이스를 도입합니다.
네임스페이스란 무엇입니까
참조 예 PHP 공식 매뉴얼:
foo.txt 파일은 /home/greg와 /home/other 디렉토리에 동시에 존재할 수 있지만, 두 개의 foo.txt 파일이 동일한 디렉토리에 존재할 수는 없습니다. 또한 /home/greg 디렉토리 외부에서 foo.txt 파일에 액세스할 때 /home/greg/foo.txt를 가져오려면 파일 이름 앞에 디렉토리 이름과 디렉토리 구분 기호를 넣어야 합니다. 이 원칙을 프로그래밍 분야에 적용한 것이 네임스페이스의 개념입니다.
네임스페이스의 역할
PHP에서 네임스페이스는 클래스 라이브러리나 애플리케이션을 작성할 때 클래스나 함수와 같은 재사용 가능한 코드를 작성할 때 발생하는 두 가지 유형의 문제를 해결하는 데 사용됩니다.
사용자가 작성한 코드와 PHP 내부 클래스/함수/상수 또는 타사 클래스/함수/상수 간의 이름 충돌.
매우 긴 식별자 이름(일반적으로 첫 번째 유형의 문제를 완화하기 위해 정의됨)에 대한 별칭(또는 짧은) 이름을 만들어 소스 코드의 가독성을 높입니다.
네임스페이스 구문 예
<?phpnamespace my\name; // 参考 "定义命名空间" 小节 class MyClass {} function myfunction() {} const MYCONST = 1; $a = new MyClass; $c = new \my\name\MyClass; // 参考 "全局空间" 小节 $a = strlen('hi'); // 参考 "使用命名空间:后备全局函数/常量" 小节 $d = namespace\MYCONST; // 参考 "namespace操作符和__NAMESPACE__常量” 小节 $d = __NAMESPACE__ . '\MYCONST'; echo constant($d); // 参考 "命名空间和动态语言特征" 小节?>
섹션 2 네임스페이스의 정의
네임스페이스의 정의
모든 합법적인 PHP 코드가 포함될 수 있지만 네임스페이스에는 클래스(추상 클래스 및 특성 포함), 인터페이스, 함수 및 상수와 같은 유형의 코드만 네임스페이스의 영향을 받습니다.
네임스페이스는 키워드 네임스페이스를 사용하여 선언됩니다. 파일에 네임스페이스가 포함된 경우 하나의 코드(declare 키워드)를 제외한 다른 모든 코드보다 먼저 네임스페이스를 선언해야 합니다.
네임스페이스를 선언하기 전에 유효한 유일한 코드는 소스 파일이 인코딩되는 방식을 정의하는 선언문입니다. 또한 공백을 포함한 모든 비 PHP 코드는 네임스페이스 선언 앞에 나타날 수 없습니다.
또한, PHP의 다른 언어 기능과 달리 동일한 네임스페이스를 여러 파일에 정의할 수 있어 동일한 네임스페이스의 내용을 나누어 다른 파일에 저장할 수 있습니다.
올바른 네임스페이스의 예:
<?phpnamespace MyProject; const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } ?>
잘못된 네임스페이스의 예:
<html> <?php namespace MyProject; // 致命错误 - 命名空间必须是程序脚本的第一条语句 ?>
디렉터리 및 유사 파일 관계로 하위 네임스페이스
정의, PHP 네임스페이스를 사용하면 계층적 네임스페이스 이름을 지정할 수도 있습니다. 따라서 네임스페이스 이름은 계층적 방식으로 정의될 수 있습니다.
다음 예에서는 상수 MyProjectSubLevelCONNECT_OK, MyProjectSubLevelConnection 클래스 및 MyProjectSubLevelconnect 함수를 생성합니다.
<?php namespace MyProject\Sub\Level; const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } ?>
동일한 파일에 여러 네임스페이스 정의
동일한 파일에 여러 네임스페이스를 정의할 수도 있습니다. 동일한 파일에 여러 네임스페이스를 정의하는 데는 두 가지 구문이 있습니다.
권장되는 구문은 중괄호를 사용하여 네임스페이스를 정의하는 것입니다.
<?php namespace MyProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } } namespace AnotherProject { const CONNECT_OK = 1; class Connection { /* ... */ } function connect() { /* ... */ } }?>
실제 프로그래밍 실습에서는 동일한 파일에 여러 네임스페이스를 정의하는 것을 매우 권장하지 않습니다. 이 방법은 주로 동일한 파일에 여러 PHP 스크립트를 결합하는 데 사용됩니다.
시작 선언문을 제외하고 네임스페이스 괄호 외부에 PHP 코드가 있어서는 안 됩니다.
위 내용은 Note 007 PHP 네임스페이스 1부의 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!