사실 이글의 내용이 그누보드의 팁자료실에 적절한지를 주춤하였다. 그러나 그누보드도 언제인가는 이 방향으로 꼭 이 문제에 당착하게 될것이라 생각하구 여기에 글을 게시하게 되었다.
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() 함수가 지원해준다.
다음의 코드실례를 보자.
[code]
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 파일이 로드됨
[/code]
보는거처럼 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기반의 그누보드로 언제든 비약하는 모습을 그려보며 이글을 마친다.
댓글 4개
게시글 목록
| 번호 | 제목 |
|---|---|
| 18088 | |
| 18080 | |
| 18078 |
JavaScript
document.querySelector 의 상수화
2
|
| 18070 |
JavaScript
로또데이터 자바스크립트 기본함수
7
|
| 18061 | |
| 18037 |
JavaScript
당첨확률 높은 로또번호 추출하기
24
|
| 18036 | |
| 18033 | |
| 18022 | |
| 18021 | |
| 18020 | |
| 18018 | |
| 18004 | |
| 17999 | |
| 17995 | |
| 17987 |
PHP
메일 사진 첨부하는 방법
2
|
| 17982 | |
| 17981 |
OS
오래된 파일 지우기
|
| 17980 |
기타
링크 단축기
|
| 17970 | |
| 17965 | |
| 17964 | |
| 17963 |
JavaScript
마우스 아웃시 레이어창이 안닫혀요
|
| 17962 | |
| 17960 |
jQuery
카카오 우편번호 jquery로 변환
|
| 17956 |
PHP
계좌번호 복사소스
1
|
| 17953 |
Mobile
br 태그 모바일에만 보여주기
|
| 17949 | |
| 17930 | |
| 17928 |
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기