ФорумПрограммированиеПыхнуть хотите?Готовые решения → Автолоадер на быструю, ногами не пинать, пожелания и критика

Автолоадер на быструю, ногами не пинать, пожелания и критика

  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 23 февраля 2012 г. 11:48, спустя 8 часов 40 минут 4 секунды

    phpdude, проверка на допустимые символы не лишняя?

    я недавно наваял автолоадер для особого расклада: в каждом неймспейсе-директории может присутствовать файл __init.php в котором может быть объявлено несколько классов.
    навеяло одним примером из манов и тем, что в yii присутствует yiilite.php  )))

    $SiteRoot/index.php, на который mod_rewrite заворачивает все запросы

    <?php

    require './protected/class/Site/__init.php';

    \Site\App::run();


    $SiteRoot/protected/class/Site/__init.php

    <?php

    namespace Site;

    function classHandler($className)
    {
       static $loaded, $dir;

    if (!isset($loaded)) {
    $loaded = array('/Site');
    $dir = __DIR__ . '/..';
    }

    $namespaces = explode('\\', $className);
    array_pop($namespaces);
    $current = '';
    foreach ($namespaces as $namespace) {
    $current .= '/' . $namespace;
    if (in_array($current, $loaded))
    continue;
    $loaded[] = $current;
    $fileName = $dir . $current . '/__init.php';
    if (file_exists($fileName)) {
    include($fileName);
    }
    }
    if (!class_exists($className, FALSE)) {
    $fileName = $dir . '/' . str_replace('\\', '/', $className) . '.php';
    if (file_exists($fileName))
    include($fileName);
    }
    }

    spl_autoload_register('\\Site\\classHandler');

    в этом же файле логично разместить все базовые классы и интерфейсы неймспейса \Site, если они 100% будут использованы при любой конфигурации. например классы "умных" исключений или дефолтовый контроллер.
    такая группировка уменьшает количество include
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 23 февраля 2012 г. 12:08, спустя 19 минут 57 секунд

    в каждом неймспейсе-директории может присутствовать файл __init.php в котором может быть объявлено несколько классов.

    python way :-)

    phpdude, проверка на допустимые символы не лишняя?

    на всякий. а то всякое может быть :-)
    Сапожник без сапог
  • Flare

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

    Spritz 23 февраля 2012 г. 15:51, спустя 3 часа 42 минуты 52 секунды

    чем метод добавлять и хранить папки в массиве $srcPath лучше, чем это делать через set_include_path()?
    Спустя 244 сек.
    artoodetoo, ты случайно не делал сравнение на сколько это будет быстрее?
  • artoodetoo

    Сообщения: 5147 Репутация: N Группа: в ухо

    Spritz 23 февраля 2012 г. 16:06, спустя 15 минут 29 секунд

    нет
    ιιlllιlllι унц-унц
  • AlexanderC

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

    Spritz 3 марта 2012 г. 19:21, спустя 9 дней 3 часа 14 минут

    Esli uzh rech' poshel ob spl to:
    [man]
    $dirIterator = new \RecursiveDirectoryIterator($this->toCount);
    $iterator = new \RecursiveIteratorIterator($dirIterator,
    \RecursiveIteratorIterator::SELF_FIRST);
    [/man]
    Спустя 27 сек.
    *poshla … bl*
  • komprenda

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

    Spritz 15 мая 2012 г. 23:50, спустя 73 дня 4 часа 29 минут


    а чем не устраивают готовые решения?


    ололо жырно

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