PSR-4 Autoloader
이 단어들 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", "OPTIONAL" 은 RFC 2119에 설명 된대로 해석해야 합니다.
역자주: 위의 키워드는 아래의 번역문에 괄호안에 표시하였습니다
1. 개요
이 PSR은 Class autoloading 에서 파일 경로에 대한 사양(specification)을 설명합니다. 이 PSR은 완벽하게 상호 운용이 가능하며 PSR-0을 포함한 다른 오토로딩 사양과 함께 사용할 수 있습니다. 또한 이 PSR은 사양에 따라 오토로드되는 파일을 저장할 위치를 설명합니다.
2. 명세서
-
"Class"라는 용어는 Class, Interface, Trait 등의 기타 유사한 구조를 말합니다.
-
정규화 된 클래스 이름의 형식은 다음과 같습니다.
\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>
-
정규화 된 Class 이름은 "공급자 네임스페이스"라고도하는 최상위 네임스페이스를 가져야만 합니다(MUST).
-
정규화 된 Class 이름은 하나 이상의 하위 네임스페이스를 가질 수 있습니다 (MAY).
-
정규화된 Class 이름은 마지막 클래스 이름(terminating class name)을 가져야합니다 (MUST).
역자주: 좀 더 좋은 의미의 표현을 찾지 못하였습니다
-
밑줄은 정규화 된 클래스 이름의 어느 부분에도 특별한 의미가 없습니다.
-
정규화 된 클래스 이름의 알파벳 문자는 대소문자의 조합 일 수 있습니다 (MAY).
-
모든 클래스 이름은 대소문자를 구분하여 참조해야합니다 (MUST).
-
-
정규화 된 클래스 이름에 해당하는 파일을 로드 할 때 ...
-
정규화 된 클래스 이름에서 최초의 네임스페이스 구분 기호를 제외하고 연속된 하나 이상의 상위 네임스페이스와 하위 네임스페이스로 구성된 ( "네임스페이스 접두사")는 적어도 하나의 "기본 디렉토리"에 대응합니다.
역자주: 표현을 더 다듬어야 할 듯 하지만 네임스페이스의 조합은 하나의 디렉토리와 매치가 된다는 의미로 이해하시면 될 것 같습니다
-
"네임스페이스 접두사" 다음의 이어지는 하위 네임스페이스 이름은 "기본 디렉토리" 내의 하위 디렉토리에 해당하며 네임스페이스 구분 기호는 디렉토리 구분 기호를 나타냅니다. 하위 디렉토리 이름은 하위 네임스페이스 이름의 대소문자와 일치해야합니다.
-
마지막에 존재하는 Class 이름은
.php
로 끝나는 파일 이름과 같아야 합니다.파일 이름은 Class 이름의 대소문자와 일치해야합니다(MUST).
역자주: \Vendor\Packages\Class => Class.php
-
-
오토로더 구현체는 예외(exception)를 throw해서는 안되며(MUST NOT), 모든 레벨의 오류를 발생해서는 안되며(MUST NOT), 값을 반환해서는 안됩니다 (SHOULD NOT).
3. 예제
아래의 표는 주어진 정규화 된 Class 이름, 네임스페이스 접두사 및 기본 디렉토리에 해당하는 파일 경로를 보여줍니다.
정규화된 Class 이름 | Namespace 접두사 | 기본 디렉토리 | 결과 파일 경로 |
---|---|---|---|
\Acme\Log\Writer\File_Writer | Acme\Log\Writer | ./acme-log-writer/lib/ | ./acme-log-writer/lib/File_Writer.php |
\Aura\Web\Response\Status | Aura\Web | /path/to/aura-web/src/ | /path/to/aura-web/src/Response/Status.php |
\Symfony\Core\Request | Symfony\Core | ./vendor/Symfony/Core/ | ./vendor/Symfony/Core/Request.php |
\Zend\Acl | Zend | /usr/includes/Zend/ | /usr/includes/Zend/Acl.php |
명세를 따르는 Autoloader의 구현 예제는 examples file을 참조하십시오. 예제 구현체는 명세(specification)의 일부로 간주되어서는 안되며(MUST NOT) 언제든지 변경 될 수 있습니다.