PHP에서 OOP의 클래스 자동 로딩
이미 알고 계시듯이 어떤 클래스를 사용하려면
require를 통해 연결해야 합니다.
프로젝트에 클래스가 매우 많으면 많은 연결이 발생하여
작성하기 매우 불편하고 관리하기 어렵습니다.
이러한 문제를 해결하기 위해 PHP에는 클래스 자동 로딩이 추가되었습니다. 자동 로딩은 코드에서 해당 클래스에 접근하려고 할 때 PHP가 자동으로 해당 클래스가 있는 파일을 로드할 수 있게 해줍니다. 그러나, 클래스는 그냥 로드되지 않습니다 - 어떤 파일 및 폴더 명명 규약에 따라 클래스를 사이트 폴더에 특별한 방식으로 배치해야 합니다. PHP에 내장된 규약을 사용하거나, 자신만의 규약을 만들어 사용할 수 있습니다.
먼저 PHP의 표준 규약을 살펴보겠습니다. 이 규약은 클래스가 있는 파일이 있다면, 사이트 폴더에서 해당 파일까지의 경로는 파일의 네임스페이스와 일치해야 하며, 파일 이름은 그 안에 있는 클래스의 이름과 일치해야 한다는 것입니다. 이때 폴더 및 파일 이름은 소문자여야 합니다.
예를 들어 살펴보겠습니다. 다음과 같은 클래스가 있다고 가정해 봅시다:
<?php
namespace Core\Admin;
class PageController
{
}
?>
규약에 따르면 이 클래스는
/core/admin/ 폴더의
pagecontroller.php 파일에 위치해야 합니다.
이제 index.php 파일에서
require를 통해 연결하지 않고
자동 로딩을 사용하여 클래스를 사용해 봅시다.
이를 위해 클래스를 호출하는 파일 시작 부분에
spl_autoload_register 함수를 호출해야 합니다.
해보겠습니다:
<?php
spl_autoload_register(); // 자동 로딩 활성화
$obj = new Core\Admin\PageController; // 객체를 안전하게 생성
?>
index.php 파일에서 클래스 자동 로딩을 활성화하세요.
폴더 및 파일 이름 규약을 따라
Core\User 클래스,
Core\Admin\Controller 클래스 및
Project\User\Data 클래스를 만드세요.
index.php 파일에서 이 클래스들의 객체를 생성하세요.