PSR-0 표준 Autoloading

비공식 번역입니다. 문서의 내용에 차이가 존재하는 경우 원본을 따릅니다.
Deprecated – 2014년 10월 21일부터 PSR-0 은(는) 더 이상 사용을 권장하지 않습니다.
PSR-4 을(를) 대안으로 사용할 수 있습니다.

이 문서는 Autoloader 상호 운용성을 위해 준수해야 하는 필수 요구 사항을 설명합니다.

이 문서에서 핵심이 되는 단어는 “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, “OPTIONAL” 입니다. 이것은 RFC 2119 에서 정의한 뜻과 내용을 기준으로 합니다.
The key words “MUST”, “MUST NOT”, “REQUIRED”, “SHALL”, “SHALL NOT”, “SHOULD”, “SHOULD NOT”, “RECOMMENDED”, “MAY”, and “OPTIONAL” in this document are to be interpreted as described in RFC 2119.

개요

  • 정규화된 네임스페이스와 클래스는 \<공급업체 이름>\(<네임스페이스>\)*<클래스 이름> 의 구조를 가집니다.
  • 네임스페이스에는 공급업체 이름으로 시작하는 최상위 네임스페이스가 있어야 합니다.
  • 네임스페이스는 필요에 따라 원하는 만큼 많은 하위 네임스페이스를 추가할 수 있습니다.
  • 파일 시스템에서 네임스페이스의 구분 기호는 DIRECTORY_SEPARATOR로 변환합니다.
  • 네임스페이스의 밑줄 기호는 특별한 의미를 가지지 않습니다. 클래스명의 밑줄 기호는 DIRECTORY_SEPARATOR로 변환됩니다.
  • 정규화된 네임스페이스와 클래스를 파일 시스템에서 불러오는 경우 마지막에 .php를 붙입니다.
  • 공급업체 이름과 네임스페이스, 클래스 이름에는 대문자와 소문자를 사용합니다.

본문

정규화된 네임스페이스와 클래스

정규화된 네임스페이스와 클래스는 \<공급업체 이름>\(<네임스페이스>\)*<클래스 이름> 의 구조를 가집니다.

네임스페이스

네임스페이스에는 반드시(MUST) 공급업체 이름으로 시작하는 최상위 네임스페이스가 있어야 합니다.
네임스페이스는 필요에 따라 원하는 만큼 많은 하위 네임스페이스를 추가할 수 있습니다.
파일 시스템에서 네임스페이스의 구분 기호는 DIRECTORY_SEPARATOR로 변환됩니다.

다음은 네임스페이스와 클래스의 예제입니다.

  • \Doctrine\Common\IsolatedClassLoader/path/to/project/lib/vendor/Doctrine/Common/IsolatedClassLoader.php
  • \Symfony\Core\Request/path/to/project/lib/vendor/Symfony/Core/Request.php
  • \Zend\Acl/path/to/project/lib/vendor/Zend/Acl.php
  • \Zend\Mail\Message/path/to/project/lib/vendor/Zend/Mail/Message.php

밑줄 기호가 존재하는 네임스페이스와 클래스

네임스페이스의 밑줄 기호는 특별한 의미를 가지지 않습니다. 클래스명의 밑줄 기호는 DIRECTORY_SEPARATOR로 변환됩니다.

다음은 밑줄 기호가 존재하는 네임스페이스와 클래스 예제입니다.

  • \namespace\package\Class_Name/path/to/project/lib/vendor/namespace/package/Class/Name.php
  • \namespace\package_name\Class_Name/path/to/project/lib/vendor/namespace/package_name/Class/Name.php

파일 시스템

정규화된 네임스페이스와 클래스를 파일 시스템에서 불러오는 경우 마지막에 .php를 붙입니다.

네임스페이스와 클래스의 이름

공급업체 이름과 네임스페이스, 클래스 이름에는 대문자와 소문자를 사용합니다

이곳에 정의된 표준은 각 버전과 호환되는 Autoloader를 위한 최소한의 공통 요소입니다. PHP 5.3 이상에서 클래스를 로드하는 예제 SplClassLoader 구현을 사용하여 이러한 표준을 따르고 있는지 확인할 수 있습니다.

구현 예제

다음은 이곳에 정의된 표준으로 Autoloader를 구현한 간단한 예제입니다.

PHP
<?php

function autoload($className)
{
    $className = ltrim($className, '\\');
    $fileName  = '';
    $namespace = '';
    if ($lastNsPos = strrpos($className, '\\')) {
        $namespace = substr($className, 0, $lastNsPos);
        $className = substr($className, $lastNsPos + 1);
        $fileName  = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
    }
    $fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';

    require $fileName;
}
spl_autoload_register('autoload');

SplClassLoader 구현 예제

다음은 이곳에 정의된 표준으로 Autoloader를 구현하는 경우 클래스를 자동으로 불러올 수 있는 SplClassLoader의 구현 예제입니다.

PHP 5.3에서 PSR-0을 따르는 클래스를 불러오는 경우 이 방법을 권장합니다.

https://gist.github.com/jwage/221634

Matthew W. O’P. et al. “Autoloading Standard”. PSR-0,  Apr 17, 2018. https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md accessed 12 Sep 2023.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다