php5의 정수 __autoload()활용하기 1

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;
}


다음 포스팅에서 include_path를 활용하는 방법과 앞서 언급한 것을 모두 적용시킨, 제가 사용하는 __autoload코드를 공개합니다~
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

Posted by ElegantCoder

Google Reader

, , ,
Response
15 Trackbacks 20 Comments

Comments List

  1. byeongseon
    2006.11.10 10:26 신고 #
    무플방지 ㅋㅋ;
    1. 네이트온에나 들어오삼-_-

      elegantCoder
      2006.11.10 10:27 신고 # M/D Permalink

  2. 타유키군
    2006.11.12 00:46 신고 #
    이곳에서 IT글이 아닌 일상 생활 글도 구경했으면 좋겠삼ㅋㅋ
    1. 할줄 아는게 이것밖에 없으니 더 무슨 말을 하겠소-_-

      elegantCoder
      2006.11.16 10:51 신고 # M/D Permalink

  3. CaseyBiorm
    2017.04.09 01:29 신고 #
    Недостаточно заботиться о здоровье своего малыша - следует предпринимать уверенные действия для его защиты. Притом поручить данный вопрос можно только лишь опытным профессиональным врачам.
    На сегодняшний день помощь личного доктора по карману далеко не всем гражданам России. А ходить по каждому вопросу в поликлинику, простаивать долгие очереди и подвергать чадо вероятности заразиться вирусами от иных детей - тоже не вариант.
    К счастью, различные частные клиники дают оформить программу Детского Добровольного Медицинского Обслуживания (ДМО), которая позволяет за незначительную сумму купить полис на годовое обслуживание у врачей.
    К сожалению, не многие люди знают о подобной услуге и не перестают лечиться народными методами, ждут длительное время в очередях и отдают большие деньги за приемы частных педиатров.
    А программа Добровольного Медицинского Обслуживания для детей даёт возможность:
    " Бесплатно получить больничный лист по уходу за ребенком;
    " Бесплатно проходить обследование у индивидуальных врачей педиатров;
    " Бесплатно или со скидкой проходить лечебные процедуры и диагностику;
    " Лечить ребенка сразу, качественно и без очередей.
    Чтобы ознакомиться со списком клиник и условиями предоставления лечения нужно вбить в поиск Яндекса или Google ключевое выражение: "Добровольное Медицинское Обслуживание". После этого необходимо подобрать понравившуюся клинику и оформить договор.

    34j5c6h87
  4. Jamesdaw
    2017.04.10 14:39 신고 #
    [url=http://moto159.ru]купить детский квадроцикл[/url]
  5. Doonnaldfogew
    2017.04.13 22:56 신고 #
    По подробнее можно?
    П.С. [url=https://cashbuzz.ru/]купить полис осаго в Мытищи[/url]
  6. IgorToimi
    2017.04.26 22:22 신고 #
    Завод емкостного оборудования Изготовление емкостей. Проектирование. Ресиверы газа, сосуды, резервуары. [url=http://nvzmk.ru/]http://nvzmk.ru/[/url]
  7. 2017.05.03 09:06 #
    비밀댓글입니다
  8. Williamspupe
    2017.05.04 09:38 신고 #
    Buy Low Ламинин Laminine LPGN from $ 29. Discover WHY Hundreds of thosands of people have taken LAMININE
  9. 2017.05.28 14:00 #
    비밀댓글입니다
  10. Williamspupe
    2017.05.29 16:45 신고 #
    Alex +1(949)285-2056 Alexandr Shipitsyn Buy Low Ламинин Laminine LPGN from $ 29.
  11. Ralpharrok
    2017.06.07 13:26 신고 #
    Как вылечить болезнь. Правда о Ламинине LPGN в Skype evg7773 Цена от 28 usd с доставкой на дом
  12. FerminCed
    2017.06.08 05:17 신고 #
    ТОП 5 2017
  13. Djondes
    2017.06.11 20:15 신고 #
    Собираем данные по факту поборов и других нарушений анонимно, по детскому саду №11 "Аленушка" г. Воскресенск, Московская область, заведующая Белоусова Татьяна Алексеевна. Телефон детского сада +7 49644 2?40-22
    Пишите о всех нарушения этого детского сада на почту netpoboram@list.ru.
  14. Michaelplulp
    2017.06.14 22:21 신고 #
    транспортерная лента
    [url=https://www.facebook.com/transporternajalenta/]More info...[/url]

    95qyqvo8BS

    7209 591a
  15. Zacharymum
    2017.06.15 06:18 신고 #
    Skype evg7773 http://1541.ru Laminine LPGN цена от 28 usd. Псориаз, Диабет, Голова, Астма, ДЦП, Эпилепсия
  16. FerminCed
    2017.06.16 22:19 신고 #
    Skype evg7773 http://1541.ru Laminine LPGN цена от 28 usd. Как Восстановить утраченное здоровье
  17. 2017.06.22 04:17 #
    비밀댓글입니다
  18. 2017.06.23 03:05 #
    비밀댓글입니다
Leave a comment


티스토리 툴바