PHP 5.3의 중요한 새로운 기능은 네임스페이스입니다.
이 기능은 PHP5.0x에서 제안되었으나 나중에 취소되어 PHP6에서 구현될 예정이었습니다. 그리고 이번에도 PHP5.3이 예정보다 일찍 출시되었는데, 이는 개발자들이 PHP5.3에 큰 중요성을 부여하고 조심스러운 태도를 취하고 있음을 보여줍니다.
공식적으로 공개되면 문서의 내용이 최신이 아닐 수 있으므로(문서가 오래되었을 수 있음) 네임스페이스 사용법에 대한 간략한 설명은 다음과 같습니다. 먼저 네임스페이스를 선언하고 새 키워드 네임스페이스를 추가합니다. 클래스 파일의 시작
<?phpnamespace Project::Module;class User {const STATUS_OK = true;functionregister($data) {...}...} 그런 다음 컨트롤러(다른 파일일 수도 있음)에서
$를
호출할 수 있습니다.user = new 이와 같습니다 Project::Module::User();$user->register($register_info); 실제로 평소와 동일하지만 두 개의 독립적인 클래스를 연결할 수 있습니다. 예를 들어
Project::Module::User;Project::Module::Blog; 이렇게 하면 언어 자체에서 변수와 클래스 간의 관계를 더 쉽게 설명하고 이해할 수 있으므로 Project_Module_Blog의 "전통적인" 긴 명명 방법을 피할 수 있습니다.
위의 설명은 네임스페이스 사용의 이점을 설명하기 어려울 수 있습니다. 새로 추가된 및 as 키워드를 사용하면 문제를 더 잘 설명할 수 있습니다. use 및 as 문은 네임스페이스 "별칭"을 참조하고 선언할 수 있습니다. 예를 들어 위 컨트롤러에서 클래스를 인스턴스화하는 코드는 다음과 같이 작성할 수 있습니다.
use Project::Module;$user = new Module::User();$user->register($register_info)
; ::Module:: User as ModuleUser;$user = new ModuleUser;$user->register($register_info); 클래스의 상수는 네임스페이스를 통해서도 액세스할 수 있습니다. 예를 들어 위 클래스의 STATUS_OK는 다음을 통해 액세스할 수 있습니다. 네임스페이스
프로젝트::모듈::User: :STATUS_OK 액세스. 또한 별칭을 사용하여 긴 "변수 이름"을 단순화할 수도 있습니다.
Project::Module::User::STATUS_OK as STATUS_OK;echo STATUS_OK; 그런데 "전역 네임스페이스"의 개념입니다. 소위 "하이퍼스페이스"는 지정된 네임스페이스가 없는 변수, 클래스 및 함수를 의미합니다. 예를 들어
function foo() {...}와 같은 함수는 foo() 또는 ::foo();를 사용하여 실행될 수 있습니다.
마지막으로 자동 로드 기능을 사용하여 지정된 네임스페이스에 클래스를 로드합니다. 간단한 함수는 다음과 같습니다
function __autoload( $classname ) {$classname = strtolower( $classname );$classname = str_replace( '::', DIRECTORY_SEPARATOR, $classname );require_once( dirname( __FILE__ ) . '/' . $ classname . '.class.php' );} 이 방법으로 예를 들어
__autoload('Project::Module::User'); 를 호출하면 Project_Module_User.class.php 파일을 자동으로 로드할 수 있습니다(불편해 보이지만).