Page tree

PHP 의 클래스들은 개별적인 .php 파일들로 존재합니다.

클래스를 사용할 때마다 includerequire 또는 중복 로딩을 방지하기 위해 include_once, require_once 등을 사용하는 것은 매우 번거로운 일입니다.


PHP 5 부터는 클래스 오토로딩 기능이 추가되어서 .php 파일에 __autoload 라는 함수를 작성하면 사용하려는 클래스나 인터페이스가 없을 경우 __autoload 함수를 자동으로 호출합니다.

<?php
function __autoload($class_name) {
    include $class_name . '.php';
}

$obj  = new MyClass1();
$obj2 = new MyClass2(); 

하지만 __autoload 는 클래스마다 구현해야 하는 불편함이 있어서 사용이 권장되고 있지 않습니다.

spl_autoload_register 는 이 문제를 해결하기 위한 함수로 여러 개의 오토로더를 등록할 수 있습니다.

<?php
spl_autoload_register('MyClassLoader::LibraryLoader');
spl_autoload_register('MyClassLoader::DatabaseLoader');

class MyClassLoader
{
	public static function LibraryLoader($class)
	{	
		include 'libraries/' . $class. '.php';
	}


	public static function DatabaseLoader ($class)
	{	
		include 'databases/' . $class. '.php';
	}
}

패키지 매니저인 컴포저는 spl_autoload_register 를 활용하여 유연하게 오토로딩을 지원하고 있습니다.

컴포저에 대해서는 다음 장에서 자세히 살펴보도록 하겠습니다.


Ref