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개
최신 컴포저도 PHP 5.6 이상이면 지원합니다.
첫 단락에 말씀하신 것 처럼 그누팁이랑 관련이 있을까요?