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

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

  • soul

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

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

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

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

    Spritz 27 октября 2010 г. 17: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 г. 18: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 г. 20:57, спустя 2 часа 9 минут 46 секунд

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

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

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

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

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

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

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

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

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

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

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

    Spritz 8 ноября 2012 г. 19: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 г. 0:52, спустя 5 часов 2 секунды

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

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