Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Поиск файла по маске для autoload


Автор: Sanchezzz 11.6.2013, 21:54
У меня много файлов названо например ArrData, DateFormat, ExtendBaseClass.    
Сейчас классы грузятся по карте классов. В целях того что не соблюдать регистр названия файлов( мне мягко говоря лень) придумываю велосипедист для поиска классов.

Как вы думаете поиск файла по маске через glob хорошая затея?

Прототип
Код

class autoload {
    /*
     * Поиск файла без учета регистра через glob
     * @param  $path  Путь
     * @param  $file  Имя файла
     **/
    public static function findClass( $path , $file = '' ){
        $str = '';
        foreach(str_split($file) as $s){
            if(in_array($s, array('.','*','[',']','/',"'",'"'))){
                $str.= $s;    
            }else{ 
                $str.='['.strtolower($s).strtoupper($s).']';
            }
        }
        $arr =  glob(  rtrim($path,'/') . '/' . $str );
        if(0==count($arr)) return false;
        return $arr; 
    }
}

Автор: Fortop 11.6.2013, 22:41
Цитата(Sanchezzz @  11.6.2013,  21:54 Найти цитируемый пост)
Как вы думаете поиск файла по маске через glob хорошая затея?

Лучше сделай себе канонизатор имен файлов

Автор: Sanchezzz 11.6.2013, 23:01
smile Не это будет еще странной затеи 

Автор: Fortop 11.6.2013, 23:48
Мне кажется лучше приводить имена файлов к общему виду при сборке проекта

Чем при его работе каждый раз.

Автор: ksnk 12.6.2013, 07:56
Наверное не при сборке, а просто один раз. Рекурсивно спустится по дереву каталога проекта и все файлы, в которых есть описание соответствующего класса переименовать , как написано в классе.
Проблемка тут только одна. Для Windows, если новое и старое имя файла отличается только регистром, переименование может не получится. В этом случае нужно старый файл удалить и новый с новым именем - создать.

Sanchezzz, glob - очень тяжелая операция, чтобы ее запихивать в такие нежные места системы, как автолод. В крайнем случае - можно при деплое создавать карту классов, тем же рекурсивно сканирующим скриптом, в виде var_export массива и подключать ее по надобности.

Автор: Sanchezzz 12.6.2013, 12:11
Да я тут уже прогнал функцию по тестам сам убедился что файл ищется тяжело на 1 путь уходит 0.500-0.800 мс
Карта классов у меня уже есть это все родное от фреймворка, а вот модели пока ищутся в добавленных путях.

пока примерно так и оставил в цикле
Код

$path1 = doc_root . DS . trim($path ,'/') .  DS  . ucfirst($class) .'.php';
$path2 = doc_root . DS . trim($path ,'/') .  DS  . $class .'.php';
if(is_file( $path1  ) ){
    include $path1;
    return true;
}elseif(is_file($path2)){
    include $path;
    return true;
}


Автор: Fortop 12.6.2013, 16:10
Цитата(ksnk @  12.6.2013,  07:56 Найти цитируемый пост)
Наверное не при сборке, а просто один раз

ну поскольку 
Цитата(Sanchezzz @  11.6.2013,  21:54 Найти цитируемый пост)
 В целях того что не соблюдать регистр названия файлов( мне мягко говоря лень)


То таки при каждой сборке. Когда будет добавлен новый файл

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)