본문 바로가기

Language/PHP

[PHP] autoload

반응형
t

php_logo

클래스를 사용하기 위해서는 객체를 생성하여 해당 메서드를 호출해 줘야한다. 다음과 같이 특정 작업을 수행하는 클래스가 있다고 가정하자.

// 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_worker_called

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는 실행 중인 시점을 기준으로 클래스나 인터페이스가 정의되어 있지 않으면 자동으로 로드해 준다.

참고 포스팅

추가로 보면 좋은 링크
제타위키, 블로그 글

반응형

'Language > PHP' 카테고리의 다른 글

[PHP] psr4  (0) 2019.05.13
[PHP] composer 설치  (0) 2019.05.13
[PHP] 웹 프로그래밍  (0) 2019.05.04
[PHP] PDO  (0) 2019.04.23
[PHP] phpstorm code sniffer 설정  (0) 2019.04.23