PHP include 자동로드 방식의 프로젝트 구조 설계하기
프레임 워크에서도 사용하는 방식중에서 간편하게 사용하는 방식의 소개 입니다.
기본 구조는 전통적인 방식으로 가독성과 빠른 처리가 장점 이면서 include를 쉽게 처리 하는 방식으로 다음과 같습니다.
우선 기본구조는 아래 형태를 가지게 되고
project/
│ config.php
├─ include/
│ ├ inc_header.php
│ ├ inc_footer.php
│ └ functions.php
├─ app/
│ ├ post_detail.php
│ ├ post_list.php
│ └ category_list.php
├─ lib/
│ ├ session.php
│ ├ db.php
│ └ validator.php
자동으로 include 하는것은 아래와 같이 등록해서 사용하는 방식 입니다.
<?php
define('ROOT', dirname(__FILE__));
// include/, controllers/, views/ 설정
define('INC', ROOT . '/include');
define('APP', ROOT . '/app');
define('LIB', ROOT . '/lib');
// PHP include_path에 추가
set_include_path(
INC . PATH_SEPARATOR .
APP . PATH_SEPARATOR .
LIB . PATH_SEPARATOR .
get_include_path()
);
// 모든 include를 autoload화
spl_autoload_register(function ($file) {
$file .= '.php';
include $file; // include_path 내에서 자동 검색됨
});
▷ set_include_path()
- include할 때 경로를 절대 지정할 필요 없음.
- 이건 시스템에 보면 PATH 있는데 이것과 같은 개념으로 리눅스에서 ls 하면 경로 지정하고 사용하지 않고 바로 사용하는데 이것과 같은 개념.
▷ spl_autoload_register()
- include "파일명"만 써도 찾아서 자동 로딩됨.
include 'inc_header';
include 'inc_footer';
include 'db';
include 'functions';
include 'post_detail';
자 이제 경로를 쓰지 않아도 자동으로 include 하게 됩니다.
- include_path 안에 INC, APP, LIB가 이미 등록됨
- autoload가 “파일명.php”를 자동 탐색해서 include 해줌
2년 전에도 오토로드(autoload)의 사용예 > PHP 올린 적이 있는데 웬만한 사이트에선 사용 하지 않아도 문제 될 것은 없고 이것 자체가 오버헤드에 들어 갑니다.
보안 문제도 공통으로 쓰이는 최상단에서 처리를 해주면 됩니다.
그리고 사이트가 커지다 보면 여기저기 라이브러리를 가져다 써야 되는 경우가 있는데 이름이 같아서 충돌 날 수 있으니 그때 사용하는 것이
자바에서의 패키지(package com.mycompany.utils;) 개념이 PHP 에서는 네임스페이스(namespace MyProject\Utils;) 입니다.
그럼 글쓴이는 잘 사용 하느냐 ... 잘 사용하지 않고
- 결정이 계속 바뀌는 곳이 있는데 이름도 바뀌고 그런곳에서 유용 할 수 있고.
- 좋은 방향으로 가려다 보니 가는 길이 바뀌는 것이라 생각하고 같이 바뀌는게 좋겠지요.
