ФорумПрограммированиеПыхнуть хотите?Готовые решения → Ещё одна реализация autoload

Ещё одна реализация autoload

  • soul

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

    Spritz 27 октября 2010 г. 9:09, спустя 16 часов 26 минут 17 секунд

    если посмотреть на рзличные либы в сети, например орм, то там вызываются классы, лежащие на пятом уровне вложенности либы. например класс field в /orm/orm/field/, но это выходит libs/*/*/*/*.php, то есть без кеширования искать файлы для каждого уровня это задница
    Спустя 33 сек.
    а еще названия файлов/классов могут совпадать
  • soul

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

    Spritz 27 октября 2010 г. 9:19, спустя 9 минут 15 секунд


    static public function init() {

    $files = array_merge(glob(SYSPATH.'libs/*/*/*/*.php'),
    glob(SYSPATH.'libs/*/*/*.php'),
    glob(SYSPATH.'libs/*/*.php'),
    glob(SYSPATH.'libs/*.php'),
    glob(APPATH.'libs/*/*/*/*.php'),
    glob(APPATH.'libs/*/*/*.php'),
    glob(APPATH.'libs/*/*.php'),
    glob(APPATH.'libs/*.php')
    );
    echo '<pre>';print_r($files);echo '</pre>';
    }


    выходит вот так, находит 39 файлов, увеличивает время выполнения с 0,00500 до 0,008616 c
  • soul

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

    Spritz 27 октября 2010 г. 10:47, спустя 1 час 28 минут 20 секунд

    тут никак маску не применить, эти константы содержат длинные пути


    static protected $store = array();

    static public function init() {

    $files = array_merge(glob(SYSPATH.'libs/*/*.php', GLOB_NOSORT),
    glob(SYSPATH.'libs/*.php', GLOB_NOSORT),
    glob(APPATH.'libs/*/*.php', GLOB_NOSORT),
    glob(APPATH.'libs/*.php', GLOB_NOSORT)
    );

    foreach ($files as $file) {
    $class = basename($file, '.php');
    self::$store[$class] = $file;
    }
    }

    static public function auto_load($classname) {

    $classname = strtolower($classname);

    if (array_key_exists($classname, self::$store)) {
    require_once(self::$store[$classname]);
    }
    }


    без кеширования пока вышло так
  • soul

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

    Spritz 27 октября 2010 г. 12:57, спустя 2 часа 9 минут 46 секунд

    а что если вместо автозагрузки прописать include_path??
    Спустя 106 сек.
    set_include_path(get_include_path().':путь:другой_путь:третий_путь');
  • soul

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

    Spritz 28 октября 2010 г. 13:14, спустя 1 день 17 минут

    так что вы думаете об этом, форумчане?
  • rider-sx

    Сообщения: 2706 Репутация: N Группа: Адекваты

    Spritz 29 октября 2010 г. 10:06, спустя 20 часов 52 минуты 7 секунд

    В Yii нравится как реализованно, все стандартные классы прописаны как алиасы array('CComponent' => 'path/to/component/class'), автолоадер просто проверяет есть ли в списке подключаемый класс если есть хватает его путь и подключает)
  • Dimezis

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

    Spritz 18 августа 2012 г. 12:08, спустя 659 дней 2 часа 1 минуту

    Форматирование - процесс удаления все данных!
  • prodigy

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

    Spritz 8 ноября 2012 г. 10:52, спустя 81 день 23 часа 44 минуты


    а что если вместо автозагрузки прописать include_path??
    Спустя 106 сек.
    set_include_path(get_include_path().':путь:другой_путь:третий_путь');


    если будут нэймспэйсы в классах, то нихуя не найдется.
    namespace в php >= 5.3 (точно не помню, когда они появились), Symfony/Component/ClassLoader/UniversalClassLoader.php
  • AlexanderC

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

    Spritz 8 ноября 2012 г. 15:52, спустя 5 часов 2 секунды

    Symfony/Component/ClassLoader/UniversalClassLoader.php + 1 - сам пользуюсь, но есть небольшой оверхед,
    профайлер показывает -1 в карму, но можно изменить к лучшему используя ин мемори кеш(хоть апц) и- ПРОФИТ.

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