PSR-4: 오토로더

(PSR-4에서 넘어옴)

이 문서의 키워드 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", "OPTIONAL"은 RFC 2119에 설명된 대로 해석된다.

1 개요[ | ]

PSR-4: Autoloader, PSR-4: Improved Autoloading
PSR-4: 오토로더, PSR-4: 향상된 오토로딩
  • 이 PSR은 파일 경로에서 클래스를 자동 로드하기 위한 사양을 설명한다.
  • 완전히 상호운용 가능하며 PSR-0을 포함한 다른 자동 로딩 사양과 함께 사용할 수 있다.
  • 이 PSR은 사양에 따라 자동 로드될 파일을 배치할 위치도 설명한다.

2 사양[ | ]

  • 1. "클래스"라는 용어는 클래스, 인터페이스, 특성 등 유사한 구조들을 나타낸다.
  • 2. 완전수식 클래스 이름의 형식은 다음과 같다.
    \<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>
    
    • 1. 완전수식 클래스 이름에는 "벤더 네임스페이스"라고도 하는 최상위 네임스페이스 이름이 있어야 한다(MUST).
    • 2. 완전수식 클래스 이름은 하나 이상의 하위 이름 공간 이름을 가질 수 있다(MAY).
    • 3. 완전수식 클래스 이름에는 종료 클래스 이름이 있어야 한다(MUST).
    • 4. 밑줄은 완전수식 클래스 이름의 어떤 부분에서도 특별한 의미가 없다.
    • 5. 완전수식 클래스 이름의 알파벳 문자는 소문자와 대문자의 조합일 수 있다(MAY).
    • 6. 모든 클래스 이름은 대소문자를 구분하여 참조해야 한다(MUST).
  • 3. 완전수식 클래스 이름에 해당하는 파일을 로드할 때 ...
    • 1. 완전수식 클래스 이름("네임스페이스 접두사")에서 선행 네임스페이스 구분 기호를 포함하지 않는 하나 이상의 선행 네임스페이스 및 하위 네임스페이스 이름의 연속 시리즈는 적어도 하나의 "베이스 디렉토리"에 해당한다.
    • 2. "네임스페이스 접두어" 뒤의 인접한 하위 네임스페이스 이름은 "기본 디렉토리" 내의 하위 디렉토리에 해당하며, 여기서 네임스페이스 구분 기호는 디렉토리 구분 기호를 나타낸다. 하위 디렉토리 이름은 하위 네임스페이스 이름의 대소문자와 일치해야 한다(MUST).
    • 3. 종료 클래스 이름은 .php로 끝나는 파일 이름에 해당한다. 파일 이름은 종료 클래스 이름의 대소문자와 일치해야 한다(MUST).
  • 4. 오토로더 구현은 예외를 발생시키지 않아야 하고, 어떤 수준의 오류도 발생시키지 않아야 하며(MUST NOT), 값을 반환해서는 안 된다(SHOULD NOT).

3 예시[ | ]

  • 아래 표는 주어진 완전수식 클래스명, 네임스페이스 접두어, 베이스 디렉토리에 따른 파일 경로를 보여준다.
완전수식 클래스명 네임스페이스 접두어 베이스 디렉토리 결과 파일경로
\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
  • 사양을 준수하는 오토로더의 구현 예시는 예제 파일을 참조하자.
  • 예제 구현은 사양의 일부로 간주되어서는 안 되며 언제든지 변경될 수 있다(MAY).

4 같이 보기[ | ]

5 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}