PHP 오브젝트의 오토로딩

PHP/매뉴얼 번역 2008/06/19 16:45
오브젝트의 오토로딩 (Autoloading Objects)

오브젝트 지향어플리케이션을 작성하는 많은 개발자가 클래스정의를 할때 마다 하나의 PHP 소스 파일을 작성한다. 가장 큰 문제점이 각 스크립트의 앞부분에 필요한 inclueds 를 하기 위하여 긴긴 리스트를 작성해야할 필요가 있다.

PHP 5 에서는 이럴 필요가 없다. 미정의 클래스/ 인터페이스를 사용하려 할대 자동적으로 호출되는 __autoload 함수를 정의 할 수 있다. 이 함수를 호출하여  스크립트엔진은 PHP가 에러가 발생하여 멈추기전에 클래스를 로드할 마지막 기회를 주게 된다.

주의: __autoload 함수의 내부에서 던져진 예외는  catch 블럭에서 캐치할 수 없으며 치명적 에러가 발생하게 된다.
주의: 오토로딩은 PHP 를 CLI 대화모드에서 실행하고 있는 경우에는 사용할 수 없다.
주의: 클래스명을 예를 들어 call_user_func() 등에서 사용하는 경우 ../  같은 위험한 문자를 포함하는 경우도 있다. 이런 함수에는 유저가 입력을 넘겨주지말것을 권장한다. 또는  적어도 __autoload() 내부에서 입력내용을 검증을 하도록 한다.

오토로딩 예
다음 예에서는 클래스 MyClass1MyClass2 를 각각 MyClass1.phpMyClass2.php  로 부터 로드한다.
<?php
function __autoload($class_name) {
    require_once
$class_name . '.php';
}

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

다음 예에서는 인터페이스 ITest 를 로드하려고 한다.
<?php

function __autoload($name
) {
   
var_dump($name
);
}

class
Foo implements ITest
{
}

/*
string(5) "ITest"

Fatal error: Interface 'ITest' not found in ...
*/
?>


원본링크 : http://www.php.net/manual/en/language.oop5.autoload.php

목차로
PHP 클래스와 오브젝트 ( Classes and Objects ) PHP 5


Trackback 0 : Comment 0