MVC구조의 PHP프레임워크들이 꼭 사용하는 spl_autoload_register() > 개발자팁

개발자팁

개발과 관련된 유용한 정보를 공유하세요.
질문은 QA에서 해주시기 바랍니다.

MVC구조의 PHP프레임워크들이 꼭 사용하는 spl_autoload_register() 정보

MVC구조의 PHP프레임워크들이 꼭 사용하는 spl_autoload_register()

본문

사실 이글의 내용이 그누보드의 팁자료실에 적절한지를 주춤하였다. 그러나 그누보드도 언제인가는 이 방향으로 꼭 이 문제에 당착하게 될것이라 생각하구 여기에 글을 게시하게 되었다.

MVC구조의 PHP프레임워크들이 어떤 요청을 받으면 어느 클래스의 어느 메소드가 그 요청을 처리하여 리턴하는가 하는것을 제나름대로의 라우팅규칙을 제안한다.

여기서 꼭 살펴볼 문제가 있다.

실지로 어느 클래스라고 할때에는 그 클래스가 정의되어 있는 파일을 불러들이는것을 전제로 한다.

가령 index.php 파일에서 클래스 A, B, C 들을 사용해야 한다면

require_once('A.php');

require_once('B.php');

require_once('C.php');

$a = new A();

$B = new B();

$C = new C();

....

이렇게 해야 한다.

그런데 요청을 받아 처리할때 몇개의 클래스가 참여할지를 항시 생각하여 위와 같이 필요한 파일들을 로딩하는것은 개발하면 할수록 번거로운 문제로 된다.

이런 문제는 MVC개발구조를 기반으로 하는 CI, Laravel 등 프레임워크들에서도 명확히 해결해야 할 문제로 나선다.

바로 이 문제, 동적으로 파일을 로딩하는 기능을 spl_autoload_register() 함수가 지원해준다.

다음의 코드실례를 보자.



class Evening
{   
    public static function autoload($class)
    {
        $path = '/root/'.$class.'.php'; // 여기서 해당 클래스가 정의된 파일들의 경로를 작성해준다.
        if (file_exists($path)) { 
             require_once $path; 
             return true; 
        }
        return false;
    }
}

spl_autoload_register(array('Evening','autoload'));

$a = new A(); // Evening::autoload('A') 로 자동 실행, /root/A.php 파일이 로드됨
$b = new B(); // Evening::autoload('B') 로 자동 실행, /root/B.php 파일이 로드됨
$c = new C(); // Evening::autoload('C') 로 자동 실행, /root/C.php 파일이 로드됨

보는거처럼 require_once('/root/A.php') 와 같은 코드파일로딩부분이 없어도 spl_autoload_register()에 의하여 '/root/A.php' 파일을 불러들였다.

이와 같이 클래스실체를 창조하는 코드가 있을때 어느 파일을 불러들여야 하는가를 spl_autoload_register()에 의하여 규칙을 작성하여 지원가능해진다.

라라벨이든, CI든 MVC기반의 프레임워크들에는 spl_autoload_register()을 꼭 사용하여 자기고유의 파일로딩규칙을 작성해놓고 그를 기초로 모든 클래스파일들이 동적으로 로딩하고 있다.

결국 spl_autoload_register()에 의하여 매 프레임워크나 프로젝트가 자기의 고유한 특징을 발현하는것이다.

프레임워크야 어디에 무슨 파일을 어떻게 작성해놓는가만 알면 되지 구태야 이런것두 알아야 할까? 이 질문도 이해는 되지만 그래도 고수라면 spl_autoload_register()에 의해 규정되어있는 파일로딩특징을 잘 알아야 하는것이다.

전번에 게시한 나의 기사 [나만의 PHP프레임워크를 만들어 본다] 에 소개한 이브닝프레임워크도 spl_autoload_register()을 사용하여 제나름의 파일로딩규칙을 작성하였다.

프레임워크소스들에서 require, include 같은 코드구문은 몇개 안된다. 그것은 spl_autoload_register()를 이용하여 동적으로 파일을 불러들이는것을 규정하기만 하면 되기때문이다.

오늘의 이글을 보시는 분들이 프레임워크를 아득한 높이로만 여기는게 아니라 spl_autoload_register() 의  사용원리만 잘 아면 얼마든지 자기만의 고유한 개발구조를 창조할 수 있다는 자신감을 가지길 바란다.

그누보드도 MVC기반의 그누보드로 언제든 비약하는 모습을 그려보며 이글을 마친다.

추천
2

댓글 4개

namespace와 composer를 활용하면 자동으로 클래스맵을 만들어서 오토로드를 구성해주죠.
최신 컴포저도 PHP 5.6 이상이면 지원합니다.
전체 5,352
개발자팁 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT