본문 바로가기
개발/PHP

__autoload() - 1

by GetLight 2010. 3. 24.
php6의 발표를 앞두고 이제서야 포스팅을 올리는 것이 쑥스럽지만 php5에서 추가된 __autoload()에 대해 이야기 해보도록 하겠습니다.

__autoload()는 PHP5에서 추가된 'intercepter'로 필요한 클래스가 로딩 되지 않았을 때 자동으로 실행되는 함수입니다.

특히 네임스페이스라는 개념이 아직 없는 PHP에서 __autoload는 아주 유용하게 활용됩니다. (가장 많이 개발되는 형태에서) PHP4에서는 클래스의 로딩을 위해 include에 몇 라인씩을 할애해야했지만, PHP5의 __autoload를 활용하면 그런 라인들이 최소화 될 수 있습니다.

사용예는

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

이렇습니다.

$className에 필요한 클래스 네임이 들어가고, 그것을 규칙에 맞도록 파일이름으로 변경시켜 인클루드 시켜주는 것으로 작업이 끝납니다.

아주 간단하게 사용을 할 수가 있겠죠?

하지만 한가지 더 생각해 보아야 할 주제는 바로 패키지 개념 적용입니다. 패키지는 관련있는 클래스들의 모음이고 어떤 방법으로든 그룹화 됩니다. 지금부터는 이 그룹화에 대해 말씀드리려고 합니다.

PEAR를 한번이라도 활용해보셨다면, 이름짓기규칙(Naming Convention)에 대해서도 아실 텐데요. DB_Common이라는 클래스는 DB/Common.php 에 저장되어 있습니다.또 Zend Framework에서 Zend_Controller_Action이라는 클래스는 Zend/Controller/Action.php에 저장되어 있습니다. _(언더바)가 /(디렉토리 분리기호)로 변경시켜 디렉토리 단위로 패키지로 묶는 것이 PHP에서의 대세 입니다.

이것을 활용한 __autoload()의 코드의 예는 이렇습니다.
function __autoload($className)
{
   $path =
str_replace('_',DIRECTORY_SEPARATOR,$className).'.php'; /*DIRECTORY
SEPARATOR는 윈도환경에서는 \으로, xNIX환경에서는 / 이 저장되어 있는 php기본 상수 입니다. */
   require_once $path;
}

태그

,