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

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

  • Абырвалг

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

    Spritz 15 июня 2010 г. 11:36

    Есть лоадер, который кидает исключение если класс не был найден.

    Когда я делаю new 'BL_Class_Not_Found' - исключение бросать нужно (оно и бросается). Но при class_exists('BL_Class_Not_Found') исключение бросать не нужно.

    Как быть:
    1) внутри лоадера бектрейсом смотреть наличие class_exists?
    2) оборачивать class_exists try-catch?
  • artoodetoo

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

    Spritz 15 июня 2010 г. 12:08, спустя 32 минуты 31 секунду

    тебе не надо самому вызывать исключение в автолоадере. не найден и ладно. дальше не его забота. а для class_exists указывай необязательный параметр autoload.
    Спустя 47 сек.
    проще будь, короче. тогда не будет проблемм.
    ιιlllιlllι унц-унц
  • Абырвалг

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

    Spritz 15 июня 2010 г. 12:19, спустя 11 минут 1 секунду

    а для class_exists указывай необязательный параметр autoload.

    он по умолчанию Ъ, что мне и нужно

    тебе не надо самому вызывать исключение в автолоадере

    да ну… Имхо все логично - попытался загрузить класс, которого нет - бамц тебе искл. Ибо иначе будет просто фаталл: не могу создать инстанцию класса, которого нет (а в фатале я бектрейс не могу получить)
  • artoodetoo

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

    Spritz 15 июня 2010 г. 13:06, спустя 47 минут 2 секунды

    да ну… Имхо все логично - попытался загрузить класс, которого нет - бамц тебе искл. Ибо иначе будет просто фаталл: не могу создать инстанцию класса, которого нет (а в фатале я бектрейс не могу получить)


    видишь ли, это и в самом деле фатально :)) если нет класса, с которым тебе хочется работать — сушите весла. это не лечится.

    ιιlllιlllι унц-унц
  • artoodetoo

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

    Spritz 15 июня 2010 г. 13:18, спустя 12 минут 11 секунд

    но если тебе хочется перехитрить самого себя - используй class_exists(classname, TRUE) и потом, если хочешь, генерируй исключение. вне автолоадера
    ιιlllιlllι унц-унц
  • Абырвалг

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

    Spritz 15 июня 2010 г. 13:20, спустя 1 минуту 17 секунд

    оно понятно, но мне нужен эксепшн а не фатал (хотя бы из-за бектрейса).

    Короче лана, забейте, проблема высосана из пальца
    Спустя 17 сек.
    вне лоадера - не хочу
  • artoodetoo

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

    Spritz 15 июня 2010 г. 13:25, спустя 5 минут 3 секунды

    это твоё дело.
    imho, фатальное это фатальное. пропущенная скобка — это фатально. опечатка в имени класса то же самое.
    ιιlllιlllι унц-унц
  • Абырвалг

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

    Spritz 15 июня 2010 г. 17:26, спустя 4 часа 1 минуту 30 секунд

    бектрейс

    распечатай мне бектрейс после фатал эррора?
  • master

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

    Spritz 15 июня 2010 г. 23:19, спустя 5 часов 52 минуты 34 секунды

    я кладу по одному классу в файл, и если файл не найден (!is_file()) печатаю бэктрейс
    не всё полезно, что в swap полезло
  • phpdude

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

    Spritz 15 июня 2010 г. 23:22, спустя 2 минуты 51 секунду

    master, у главрыбы (прости что так называю, но абырвалгом язык не поворачивается назвать, хотя главрыба в моей исторической линии тоже уныло - у меня был сосед в общаге по фамилии Фиш :D, но как грится из двух зол) проблема в том, что автолоад то есть, что он файлы то на ексист то проверят, но! видимо (насоклько я понял) class_exists вызывает тоже автолоад, что в принципе понятно) и у него этот ексепшн вываливается :))
    Сапожник без сапог
  • master

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

    Spritz 15 июня 2010 г. 23:37, спустя 14 минут 50 секунд

    phpdude,
    честно говоря не пойму зачем такое надо. обычно class_exists используется перед include
    if (!class_exists('Foo', true)) include 'Foo.php';
    причём принудительно указывается второй параметр, чтобы class_exists не вызывал __autoload. потому что если class_exists (подразумевающий что не все классы могут быть загружены автоматически) будет вызывать __autoload, это рано или поздно приведёт к фаталу.
    не всё полезно, что в swap полезло
  • kostyl

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

    Spritz 15 июня 2010 г. 23:44, спустя 7 минут 15 секунд

    Короче лана, забейте, проблема высосана из пальца

  • phpdude

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

    Spritz 15 июня 2010 г. 23:52, спустя 8 минут 14 секунд

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

    ну типа

    if(class_exists("myclass_extension")) … $extension->create($this);
    Сапожник без сапог
  • Абырвалг

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

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

    проблема в том, что автолоад то есть, что он файлы то на ексист то проверят, но! видимо (насоклько я понял) class_exists вызывает тоже автолоад, что в принципе понятно) и у него этот ексепшн вываливается :))

    100% понимание того, че я хотел. При class_exists автолоад нужен, но эксепшен не нужен.
  • kostyl

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

    Spritz 16 июня 2010 г. 16:33, спустя 27 минут 53 секунды

    Абырвалг, так слови исключение, проблема то… или тебе это кажется не красивым? )

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