PSR-4 을(를) 대안으로 사용할 수 있습니다.
이 문서는 Autoloader 상호 운용성을 위해 준수해야 하는 필수 요구 사항을 설명합니다.
개요
- 정규화된 네임스페이스와 클래스는 \<공급업체 이름>\(<네임스페이스>\)*<클래스 이름> 의 구조를 가집니다.
- 네임스페이스에는 공급업체 이름으로 시작하는 최상위 네임스페이스가 있어야 합니다.
- 네임스페이스는 필요에 따라 원하는 만큼 많은 하위 네임스페이스를 추가할 수 있습니다.
- 파일 시스템에서 네임스페이스의 구분 기호는 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
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.

INAS의 블LOG에 오신 것을 환영합니다