클래스와 함께 오토로드를 사용하면 별도로 include를 하지 않아도 되기 때문에 편리한 점이 있습니다.
그리고 파일명과 클래스명을 동일하게 하기 때문에 찾는것이 어려운것도 아닙니다.
클래스를 사용하지 않으시는 분들은 사용이 익숙치 않을 수 있는데 같은 성격을 가진 함수를 한곳에 몰아 넣어 사용하는것이라 생각을 해도 됩니다. 여러부품을 더큰 부품의 덩어리로 만들어 사용한다고 생각하셔도 되고 사용해 보면 함수 보다 이해하기 쉬운 장점도 가지고 있습니다.
// autoload.php
spl_autoload_register(function ($class_name) {
// 명확하게 문제가 생기지 않는다면 파일 체크는 안하는 속도 측면에선 좋다.
if ( is_file($class_name) ) {
include $class_name . '.php';
}
});
여기에서 include 하는 부분에서 자신의 환경에 맞게 조건을 줄 수 있습니다. class가 들어 있는 디렉토리가 있으면 그것의 경로를 추가하거나 위 예에서 처럼 파일 체크 하는 기능을 가지고 없으면 오류가 발생하기 때문에(없는 클래스를 하위쪽에서 호출 하기 때문에) 프로그램을 종료 하거나 하는 기능을 넣으면 됩니다.
// Header.php
class Header {
function __construct() {
echo '<html><head><title>Test</title></head><body>';
}
}
// Body.php
class Body {
function __construct() {
echo 'Hello, World!';
}
}
// Footer.php
class Footer {
function __construct() {
echo '</body></html>';
}
}
위 예에서는 테스트 하는것이라서 생성자에 넣었지만 실무에선 자신의 환경에 맞는 것을 넣어 주면 됩니다.
// list.php
include $_SERVER['DOCUMENT_ROOT'] . '/autoload.php';
$header = new Header();
// 비즈니스 로직
$body = new Body();
$footer = new Footer();
// view.php
include $_SERVER['DOCUMENT_ROOT'] . '/autoload.php';
$header = new Header();
// 비즈니스 로직
$body = new Body();
$footer = new Footer();
// search.php
include $_SERVER['DOCUMENT_ROOT'] . '/autoload.php';
$header = new Header();
// 비즈니스 로직
$body = new Body();
$footer = new Footer();
위 예를 보면 알 수 있듯이 별도의 include는 오토로드 단 하나만 하면 됩니다.
이렇게 되면 위에서 헤더와, 풋더 부분을 모든 페이지에서 수동으로 계속 넣어줘야 하는 부분을 어떻게 처리 할까에 대한 부분이 생길 수 있는데요. 현재와 같은 방법에선 이부분이 최선 입니다.

상단, 하단 중복되는 부분이 싫으면 밖에서 한번 더 감싸서 상단, 하단 부분을 한번만 처리하는 방법을 사용하면 되는데 이런것에 해당하는 프레임 워크가 라라벨이나 심포니 같은 것들이 있습니다. 여러 기능 문제로 속도 측면에서 손해를 보는 부분이 있기 때문에 이점은 감안하고 도입하는 것이 좋으며 또한 학습의 시간이 있습니다.
예를 들면 아래와 같은 방법을 사용할 수 있습니다.
실제 MVC 모델에서도 아래와 같이 사용하며 rewrite 사용하여 주소를 재작성 해줍니다.
// main.php
require_once 'autoload.php';
// 생성자에 모든 공통된 부분을 넣습니다 (예를 들어, 헤더)
$header = new Header();
// 페이지 로드
// $_GET['page']에 따라 다른 비즈니스 로직/컨텐츠 로드
if (!empty($_GET['page']) && file_exists($_GET['page'] . '.php')) {
// $_GET['page']의 입력 값에 따라 list.php, view.php, search.php 등이 포함되며
// 해당 파일에서는 비즈니스 로직만 처리하도록 작성됩니다.
require_once $_GET['page'] . '.php';
} else {
echo '잘못된 접근입니다.';
}
// 소멸자에 모든 공통된 부분을 넣습니다 (예를 들어, 푸터)
$footer = new Footer();
list.php, view.php, search.php 에서는 비즈니스 로직만 포함하면 되고 헤더와 푸터는 자동으로 적용됩니다. 페이지를 로드할 때는 main.php에 page 파라미터를 전달하여 해당하는 비즈니스 로직을 처리하면 됩니다.
생성자라는 말이 어려울 수 있는데 다음과 같이 이해 해도 문제 없습니다.
- 디폴트 처리 함수
- 시작할 때 한번 자동으로 실행 하여 뭔가 처리하는 함수
* 네임스페이스 관련글
- PHP 네임스페이스 쓰임새와 예제
- 네임스페이스(name space)가 있을때 include 하여 객체 사용하는 방법