티스토리 뷰

SW 개발/PHP

PHP, 오토로드 이해하기

지단로보트 2017.06.01 01:41

spl_autoload_register()

  • 현재 PHP 생태계에서 공식적으로 권장되는 오토로드의 올바른 사용법은 spl_autoload_register()(PHP >= 5.1.2) 내장 함수를 이용하여 커스텀 오토로드 함수를 등록하는 것이다.

  • 파라메터를 달리 하여 여러번 서로 다른 커스텀 오토로드 함수를 등록할 수 있으며 새로운 클래스 참조시 등록한 순서대로 오토로드 함수가 실행된다.

  • 우선순위로 등록된 오토로드 함수가 클래스를 찾아냈다면 후순위에 존재하는 오토로드 함수는 실행되지 않는다. 모든 오토로드 함수가 실행되어도 클래스를 찾아내지 못했다면 Fatal Error가 발생한다.

  • 현재 오토로드의 표준이 된 Composer(PHP >= 5.3.2)의 역할이 바로 composer.json 파일의 설정대로 패키지 설치 및 커스텀 오토로드 함수를 자동 생성한 후 spl_autoload_register()로 등록해주는 것이다. 개발자가 직접 커스텀 오토로드 함수를 작성하여 등록해야 하는 부담을 한 방에 해결해준다.

spl_autoload_functions()

  • spl_autoload_register()로 등록한 커스텀 오토로드 함수 목록을 확인하려면 spl_autoload_functions()를 호출한다. 현재 등록된 커스텀 오토로드 함수 목록을 배열로 반환한다.

spl_autoload_unregister()

  • 등록한 커스텀 오토로드 함수를 해제할 수도 있다. spl_autoload_unregister()를 호출한다.
// 현재 등록된 오토로드 함수 배열 반환
$aAutoload = spl_autoload_functions();

// 첫번째 등록된 커스텀 오토로드 함수를 해제
spl_autoload_unregister($aAutoload[0]);

// 등록된 Composer의 오토로드 함수를 해제
foreach ($aAutoload as $autoload) {
    if (is_array($autoload)) {
        if ($autoload[0] instanceof \Composer\Autoload\ClassLoader) {
            spl_autoload_unregister($autoload);
        }
    }
}

// 등록된 Composer가 최우선 순위일 경우 다른 커스텀 오로토드와의 충돌을 피하기 위해 후순위로 이동
foreach ($aAutoload as $autoload) {
    if (is_array($autoload)) {
        if ($autoload[0] instanceof \Composer\Autoload\ClassLoader) {
            $composerAutoload = $autoload;
            spl_autoload_unregister($composerAutoload);
            spl_autoload_register($composerAutoload);
        }
    }
}

참고 글

관련 글

댓글
댓글쓰기 폼