오토로드

앞에서 클래스는 한 파일당 한개의 클래스를 생성한다고 했었죠?
디즈니에 대한 클래스가 disney.php에 있고 marvel에 대한 클래스가 marvel.php 파일에 있다고 했을 때
이 디즈니와 마블의 클래스를 모두 사용하는 파일 show.php가 있다고 하면
show.php 파일에서는 disney.php와 marvel.php 파일을 include하고 인스턴스를 생성할거에요.
다음과 같이

include "disney.php";
include "marvel.php";

$disney = new disney;
$marvel = new marvel;

위와 같은 경우는 단순한 예를 든것이고 정말 대형의 프로그램은 여러가지 클래스들을 include하게 됩니다.
프로그램이 복잡해지면서 인간의 실수로 include하지 않았는데 인스턴스를 생성할 수도 있을거에요.
또 매번 해당 파일을 include하고 인스턴스를 생성하는것도 귀찮은 일이기도해요.
오토로드를 사용하면 이것을 더 쉽게 구현할 수 있습니다.
이것은 인스턴스한 에버디벨의 코딩 에디터로는 실행에 어려움이 있으므로 EEOS에서 실행해 주세요.

오토로드 사용 방법

function __autoload(클래스명을 담을 파라미터명)
{
    include 클래스명을 담을 파라미터명.'.php';
}

__autoload 함수는 인스턴스를 생성하면 자동으로 호출되는 함수입니다.
그리고 해당 클래스명이 전달인자로 사용됩니다.
위의 사용방법에서 클래스명을 담을 파라미터명을 $className으로 한다면 다음과 같겠죠?

function __autoload($className)
{
    include $className.'.php';
}

즉 저렇게 설계되어있기 때문에 클래스를 선언한 파일명은 규칙이 정해져있어야해요.
만약 여러분이 파일명과 클래스명을 일치 시킨다면 위와 같이 사용하면 됩니다.
그게 아니고 나는 클래스명-class.php 이렇게 사용하겠다.
그러면 다음과 같이 변경해야겠죠.

function __autoload($className)
{
    include $className.'-class.php';
}

자 그럼 예제를 통해서 볼까요.

eeos에서 하시면 편리하지만 에버디벨 코딩 에디터에서도 이 에제를 실행 할 수 있게끔 조치를 취했으므로 바로 실행하셔도 결과를 확인할 수 있습니다.
미리 marvel.php와 dinsey.php 파일을 만들었어요. 다음은 disney.php 파일의 내용입니다.

<?php
	class disney
	{
		function hello()
		{
			return 'disney';
		}
	}
?>

이제 marvel.php 파일을 만들게요.

<?php
	class marvel
	{
		function hello()
		{
			return 'marvel';
		}
	}
?>

이제 disney, marvel 클래스의 인스턴스를 생성하는 예제입니다.
가장 중요한 예제죠.

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

    $mickey = new disney;
    echo $mickey->hello();
    echo '<br>';
    $ironMan = new marvel;
    echo $ironMan->hello();

?>

이 코드의 결과

인스턴스를 생성하니까 클래스명이 전달인자가되어 __autoload 함수가 자동 실행되어 명령을 실행했습니다. ^^

<?php
    function __autoload($className)
    {
        echo "{$className}.php을 include합니다.";
        include $className.'.php';
    }

    $mickey = new disney;
    echo $mickey->hello();
    echo '<br>';
    $ironMan = new marvel;
    echo $ironMan->hello();

?>

위 코드의 결과

이렇게 오토로드에 대해서 알아봤습니다. ^^