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

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

  • soul

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

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

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

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

    Spritz Окт. 27, 2010, 5: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, 6: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, 8:57 п.п., спустя 2 часа 9 минут 46 секунд

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

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

    Spritz Окт. 28, 2010, 9:14 п.п., спустя 1 день 17 минут

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

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

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

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

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

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

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

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

    Spritz Ноя. 8, 2012, 7: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 Ноя. 9, 2012, 12:52 д.п., спустя 5 часов 2 секунды

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

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