ФорумПрограммированиеPHP для идиотов → Не бросать искл. при class_exists (spl_autoload_call)

Не бросать искл. при class_exists (spl_autoload_call)

  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 16 июня 2010 г. 8:44, спустя 11 минут 13 секунд

    да, не кошерно. Есть что-то типа такого

    if (class_exists($storage) || class_exists($storage = 'BL_Sessions_StorageAdapter_' . $storage))
    /// …

    если ловить исключение - то нужно разбивать на кусочки..

    лана, забейте, не такая уж это и проблема
  • master

    Сообщения: 3236 Репутация: N Группа: Джедаи

    Spritz 16 июня 2010 г. 9:02, спустя 17 минут 49 секунд

    При class_exists автолоад нужен, но эксепшен не нужен.

    для чего это?
    не всё полезно, что в swap полезло
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 16 июня 2010 г. 9:15, спустя 12 минут 44 секунды

    ну это как бы адаптеры всяческие, тот же storage для сессий
  • phpdude

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

    Spritz 16 июня 2010 г. 21:01, спустя 11 часов 46 минут 28 секунд

    Абырвалг, адаптеры через екзист цепляешь? оО

    не лучше ли Library::registerAdapter($adapter = "name" | Object)
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 17 июня 2010 г. 2:22, спустя 5 часов 20 минут 22 секунды

    не цепляю а проверяю их наличие
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 2 сентября 2010 г. 4:59, спустя 77 дней 2 часа 37 минут

    как-то так

    /**
    *
    * @param string $class
    * @param string $file
    * @return boolean
    */
    protected function loadClass($class, $file)
    {
    if (file_exists($file)) {
    require $file;
    } elseif ($this->doesAutoloadCalled()) {
    throw new Loader_Exception(sprintf('Missing file "%s" for class "%s"', $file, $class));
    } else {
    return false; // (class|interface)_exists called
    }

    if (!class_exists($class, false) && !interface_exists($class, false)) {
    if ($this->doesAutoloadCalled()) {
    throw new Loader_Exception(sprintf('Missing class "%s" in file "%s"', $class, $file));
    } else {
    return false; // (class|interface)_exists called
    }
    }

    return true;
    }

    protected function doesAutoloadCalled()
    {
    return !count(array_filter(debug_backtrace(), function($line) {
    return in_array($line['function'], array('class_exists', 'interface_exists'));
    }));
    }


    оверхед не будет большой, так как мы проверяем бектрейс только если файла или класса в этом файле нету, а такое не так уж и часто происходит

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