PHP
오토로드
오토로드
앞에서 클래스는 한 파일당 한개의 클래스를 생성한다고 했었죠?
디즈니에 대한 클래스가 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(); ?>
결과는 바로 아래에서 확인할 수 있습니다.
위 코드의 결과
이렇게 오토로드에 대해서 알아봤습니다. ^^
//=$langList['bottomThankyou'][$langMode]?>