ФорумПрограммированиеPHP для идиотовPHP и ООП → __autoload

__autoload

  • Patrick

    Сообщения: 506 Репутация: N Группа: Кто попало

    Spritz 23 июля 2007 г. 23:36

    я хочу что все классы располагались по пакетам (каждый пакет это папка),так вот метод PEAR меня не устраивает. теперь к делу autoload ,будеть "прочёсывать" папки где могут находится классы и заносить в массив( array(class_name=>path)),который в последствии кэшируется, далее просто проверяю наличие класса и пути, разумеется + include_path. Т.к. это операция долговременная, то при следующим запуске проверяю кэш… для рабочей машины кэш можно установить 30 мин, для продакшен вообще делать это по cron'y или например раз в сутки…
    что вы об этом думаете?
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 23 июля 2007 г. 23:40, спустя 3 минуты 43 секунды

    озвучь исходную задачу плиз :)
  • Patrick

    Сообщения: 506 Репутация: N Группа: Кто попало

    Spritz 24 июля 2007 г. 0:05, спустя 25 минут 52 секунды

    сделать __autoload!
    классы хранятся так :
    /lib
    /Acl
    /src
    *.class.php
    /ActiveRecords
    /src
    *.class.php
    /Cache
    /src
    *.class.php
    /DataBase
    /src
    *.class.php

    и т.д.
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 24 июля 2007 г. 0:21, спустя 16 минут 2 секунды

    не понимаю.
    есть задача подгрузить все доступные классы сразу?
    имхо класс должен подгружаться по мере надобности
  • Patrick

    Сообщения: 506 Репутация: N Группа: Кто попало

    Spritz 24 июля 2007 г. 0:25, спустя 3 минуты 13 секунд


    не понимаю.
    есть задача подгрузить все доступные классы сразу?

    не все а только те которые, функцией http://lv.php.net/autoload
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 24 июля 2007 г. 0:30, спустя 5 минут 16 секунд

    честно - вообще ничего не понимаю(
    основная идея использования этой функции - подгружение классов по мере надобности.
    ты их хочешь подгружать сразу? тогда зачем вообще аутолоад понадобился?
  • Patrick

    Сообщения: 506 Репутация: N Группа: Кто попало

    Spritz 24 июля 2007 г. 0:33, спустя 3 минуты 12 секунд


    честно - вообще ничего не понимаю(
    основная идея использования этой функции - подгружение классов по мере надобности.
    ты их хочешь подгружать сразу? тогда зачем вообще аутолоад понадобился?
    сразу хочу создать только кэш (массив), а уже потом подгружать
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 24 июля 2007 г. 0:37, спустя 3 минуты 52 секунды

    не, считаю что подгужение должно происходить так:
    1. понадобился класс.
    2. проверили небыл ли он уже подгружен. если нет то
    3. обратились к дире в которой лежит этот класс, проверили наличие конкретного файла, подгрузили класс.

    если файл лежит где-то там и называется как-то так то это не дело.
    если все происходит так, не понимаю зачем кеш
  • Patrick

    Сообщения: 506 Репутация: N Группа: Кто попало

    Spritz 24 июля 2007 г. 0:56, спустя 18 минут 33 секунды

    Алгоритм примерно такой, но как системе узнать в какой директории находится класс? сгружать их в одну директорию не хочу т.к. будет слишком много путаницы…
    зачем кеш

    Кэш - банальный индексатор, для упрощения поиска файлов…
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 24 июля 2007 г. 1:02, спустя 6 минут 44 секунды

    зачем все в одну? модно хранить систиматезировано.
    то что ты хочешь сделать больше напоминает какой-нибудь конфиг - стратический и редактируемый вручную файл.
    или у тебя классы сами-по-себе добавляются и исчезают?
  • Patrick

    Сообщения: 506 Репутация: N Группа: Кто попало

    Spritz 24 июля 2007 г. 1:16, спустя 13 минут 45 секунд

    то что ты хочешь сделать больше напоминает какой-нибудь конфиг - стратический и редактируемый вручную файл.

    Примерно так оно и есть

    или у тебя классы сами-по-себе добавляются и исчезают?

    Возможно да новые версии пакетов будут обновлятся по крону через SVN или через PEAR(что больше вероятность), но пока это только в задумках, что касается реалий то:
    1. Не хочется писать этот конфиг
    2. Намного проще всё автоматизировать
    3. Вполне реально можно забыть прописать класс в "конфиг", но добавив его…
    4. Хотелось бы сделать стандартное решение загрузки файлов не завищищие от путей где находится файл с классом
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 24 июля 2007 г. 1:21, спустя 5 минут 17 секунд

    смотри сам тогда по своей исходной задаче, которая немного шире чем "сделать автозагрузку".
    можно автоматизировать, если не боишься глюков. мне больше ручное редактирование нравится, но опять-таки от задач зависит
  • ghost

    Сообщения: 883 Репутация: N Группа: Джедаи

    Spritz 24 июля 2007 г. 1:26, спустя 5 минут 7 секунд

    и тогда лог результата таких апдейтов вести надо обязательно
  • Patrick

    Сообщения: 506 Репутация: N Группа: Кто попало

    Spritz 24 июля 2007 г. 1:32, спустя 5 минут 6 секунд


    и тогда лог результата таких апдейтов вести надо обязательно

    это понятно.

    Забыл еще про
    5. помимо папки src, будет еще и test.

    ЗЫ Если использовать PEAR то при update'ах можно вообще использовать консольный индексатор.
  • vasa_c

    Сообщения: 3131 Репутация: N Группа: в ухо

    Spritz 24 июля 2007 г. 11:02, спустя 9 часов 30 минут 7 секунд

    Patrick, уверен, что file_exists() по всем доступным папкам будет работать неприемлимо долго?
    Может быть искать класс этим методом и кешировать результат для каждого класса, а не устраивать периодически полную индексацию?
    По имени класса невозможно определить пакет, которому он принадлежит?

Пожалуйста, авторизуйтесь, чтобы написать комментарий!