__autoload и include_path

Духовность™

Продвинутый новичок
__autoload и include_path

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

У меня раньше было так:

PHP:
function __autoload($class_name)
{
    static $clasDirs = array
    (
        'controller',
        'base',
        'model',
        'abstract',
        'interface',
        'view',
        'mapper',
        'activerecord',
        'validator'
    );

    foreach ($clasDirs as $cdir)
    {
       $class = CLASSES.$cdir.'/'.$class_name.'.php';

        if (file_exists($class))
        {
            include_once($class);
            return true;
        }
    }
}
а теперь вот подумал, может так лучше будет:

PHP:
$sep = @$_SERVER['COMSPEC'] ? ";" : ":"; // (с) котеров 

ini_set("include_path", ".".$sep.
FUNCTIONS.$sep.
CLASSES.$sep.
CLASSES.'activerecord'.$sep.
CLASSES.'base'.$sep.
CLASSES.'controller'.$sep.
CLASSES.'interface'.$sep.
CLASSES.'mapper'.$sep.
CLASSES.'model'.$sep.
CLASSES.'validator'.$sep.
CLASSES.'view'.$sep
);

function __autoload($class_name)
{
    include_once($class_name.'.php');
}
 

zerkms

TDD infected
Команда форума
может так лучше будет
у тебя есть критерий, который ты в начале поста поставил во главу стола: производительность.
у тебя есть 2 реализации.

возьми и протестируй.
 

Духовность™

Продвинутый новичок
zerkms
не, я чисто теоретически думаю -- я теоретик :)

Ведь механизм поиска PHP наверняка намного быстрее, чем механизм пользовательский спомощью foreach и file_exists. Я так думаю..
 

iceman

говнокодер
по первому варианту: программист, читающий твой код, тоже должен пробежаться по папкам в поисках нужного файла?
 

zerkms

TDD infected
Команда форума
iceman
программист должен пользоваться нормальной ИДЕ, которая умеет искать классы по имени, бесприменительно к фс.
 

MiksIr

miksir@home:~$
Вообще советовал бы иметь реестр - где какой класс, и сразу знать нужный файл, а не бегать по папкам.
Если все же по конкретному вопросу - file_exists делает один сискол (access), тогда как поиск в инклуд_пути делает по сисколу (stat) на каждую директорию(!) в пути и так для каждого пути в include_path.
 

MiksIr

miksir@home:~$
Несомненно. Лучше вообще не думать, хреначить код и не знать как он работает на уровне системы =) Главное индексы в базе построить, а остальное спички! =) Зато потом какие перлы можно услышать от таких программеров, ух =)
К слову, мильон спичек - это уже пожар - а мне тут довелось поработать на одном ВПС-е одного из наших лидеров таких вот услуг. Так сказать, что там файловая система тормозит - это ничего не сказать. И каждый стат там выливается в такие тормоза, что больше половины времени исполнения скрипта тратится на ожидание. Но мыж на спичках не экономим - всегда можно взять другой ВПС подороже =)
 

AmdY

Пью пиво
Команда форума
$_SERVER['COMSPEC'] - getenv('COMSPEC')
а что не так с PATH_SEPORATOR ?

и нужно смело юзать require без всяких once
 

dimagolov

Новичок
кстати, а имеет ли использование DIRECTORY_SEPARATOR практическую пользу? особеноо при формировании путей? ведь UNIX разделитель "/" на данный момент отлично работает и в win версиях php?
 

weregod

unserializer
вариант с ini_set может не проканать на сервере, где ф-ция отключена, запрещена или возвращает false
 

AmdY

Пью пиво
Команда форума
кстати, а почему ini_set, а не set_include_path?
 

zerkms

TDD infected
Команда форума
MiksIr
оптимизировать нужно то, что тормозит, а не то, что оптимизировать проще.
запиши и читай перед сном, много раз.
 

AmdY

Пью пиво
Команда форума
ага, и толку от такой оптимизации, когда включится кеш опкода. но вот про то, что нужно знать откуда берутся файлы, это MiksIr верно подметил.
 
Сверху