클래스를 사용하기 위해서는 객체를 생성하여 해당 메서드를 호출해 줘야한다. 다음과 같이 특정 작업을 수행하는 클래스가 있다고 가정하자.
// index.php
<?php
class Worker
{
public function work()
{
echo "Worker::work() Called\n";
//do something...
}
}
위의 코드는 Worker라는 클래스를 정의한 것이다. work()
함수를 실행하기 위해서는 Worker 클래스의 인스턴스를 생성하여 호출을 해줘야 한다. 아래는 index.php에서 Worker 클래스의 인스턴스 $w
를 생성하여 work()를 호출하는 코드이다.
//index.php
<?php
require_once "Worker.php";
$w = new Worker();
$w->work();
require_once, require, include, include_once에 대한 내용은 여기에서 확인할 수 있다.
require_once를 통해 Worker.php 파일을 가져와 Worker 클래스 정의를 포함하게 된다. 만일 해당 파일을 포함시키지 않는다면 Worker 클래스를 이용할 수 없다. 그리고 $w라는 인스턴스를 생성하여 work() 함수를 호출했다. localhost/index.php에 접근하면 다음과 같이 출력한다.
index.php에 접근하면 Worker의 인스턴스를 생성하고 메서드를 실행한다.
지금의 경우에는 하나의 클래스만 가져와서 처리했지만 만일 다수의 파일을 가져올 경우에는 require_once
의 호출 빈도가 증가할 것이다.
//index.php
<?php
require_once "Worker.php";
require_once "Worker2.php";
require_once "Worker3.php";
require_once "Worker4.php";
require_once "Worker5.php";
require_once "Worker6.php";
require_once "Worker7.php";
...
$w = new Worker();
$w->work();
$w1 = new Worker2();
$w1->work();
...
이 처럼 다수의 클래스를 가져오는 것은 불편하고 파일을 빼먹거나 오타로 인한 실수를 유발할 위험이 있다.
Autoload는 이런 문제점을 해결하기 위해 사용된다. 포함해야할 파일을 일일히 작성할 필요 없이 필요한 클래스 파일들을 가져올 수 있다.
//autoloader.php
<?php
spl_autoload_register($class)
{
include "./" . $class . ".php";
}
이를 통해 require_once
를 한 줄만 써도 사용되는 클래스들을 포함시킬 수 있다.
//index.php
<?php
require_once "autoload.php";
$w = new Worker();
$w->work();
$w1 = new Worker2();
$w1->work();
...
유사한 기능을 제공하는 __autoload()
가 존재하지만, PHP5에 추가된 spl_autoload_register()
사용을 권장한다. spl_autoload_register는 실행 중인 시점을 기준으로 클래스나 인터페이스가 정의되어 있지 않으면 자동으로 로드해 준다.