이제 PHP 에서도 클래스를 사용해서 객체지향 프로그래밍을 하는 것이 일반적이 되어 가고 있습니다. 보통 클래스는 하나의 파일에 정의하고 클래스를 사용할때 include 해서 사용하게 됩니다. 이 때 클래스가 많아지면 include 하는 코드가 많아지게 됩니다. PHP 5에서 부터는 이러한 클래스를 자동으로 로드하는 기능을 제공합니다. spl_autoload_register() 함수를 사용하여 처리할 수 있습니다.
1. 이번 예제는 폴더 구조는 다음과 같습니다.
폴더 구조는 예제를 위해서 임의로 정한 것이므로 자신이 편한 곳에 사용하면 되겠습니다.
- /comm/classes/Apple.php, Banana.php : 샘플 클래스 파일 입니다.
- /comm/lib/autoload.php : 클래스를 자동으로 로드 하는 코드 입니다. 클래스를 사용하는 파일에서 이 파일을 include 하면 됩니다.
- /page/page.php : 클래스를 사용하는 샘플 PHP 코드 입니다.
2. 샘플 클래스 파일 입니다.
간단히 하기 위해서 Apple.php 와 Banana.php 파일을 클래스 이름만 다르고 내용은 같습니다.
<?php
class Apple {
private $name;
public function __construct($name) {
$this->name = $name;
}
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
?>
3. 클래스를 자동으로 로딩하는 코드 입니다.
spl_autoload_register() 함수의 인자로 클래스 이름을 받아서 로드하는 익명 함수를 제공합니다.
<?php
spl_autoload_register(function($className) {
include __DIR__ . '/../classes/' . $className . '.php';
});
?>
4. 클래스를 사용하는 파일에서는 이제 autoload.php 파일만 include 하면 됩니다.
<?php include_once('../comm/lib/autoload.php'); ?>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>페이지</title>
</head>
<body>
<h3>오토로드 테스트</h3>
<?php
$banana = new Banana('바나바');
$apple = new Apple('사과');
echo $banana->getName();
echo "<br />";
echo $apple->getName();
?>
</body>
</html>
5. 클래스가 있는 폴더가 여러곳이라면 다음과 같이 처리할수 있겠습니다.
<?php
spl_autoload_register(function($className) {
$dirs = array(
'classes/',
'classes2/'
);
foreach($dirs as $dir) {
if(file_exists(__DIR__ . '/../' . $dir. $className . '.php')) {
require_once(__DIR__ . '/../' . $dir. $className . '.php');
return;
}
}
throw new Exception('Can not load class : ' . $className);
});
?>
※ 예제소스
'프로그래밍 > PHP' 카테고리의 다른 글
PHP 파일 업로드와 다운로드 만들기 (21) | 2018.04.21 |
---|---|
PHP 실행 지연(delay) 시키기 (0) | 2018.04.19 |
PHP에서 jQuery Ajax로 json 데이터 주고받기 (10) | 2018.04.19 |
그누보드 사용법 - 기본설정, 게시판, 메뉴, 페이지 만들기 (1) | 2018.04.18 |
그누보드5 설치하기 - Eclipse PDT 프로젝트로 설치 (0) | 2018.04.18 |