Форум → Программирование → PHP для идиотов → Не бросать искл. при class_exists (spl_autoload_call)
Не бросать искл. при class_exists (spl_autoload_call)
Страницы: ← Следующая страница →
-
Есть лоадер, который кидает исключение если класс не был найден.
Когда я делаю new 'BL_Class_Not_Found' - исключение бросать нужно (оно и бросается). Но при class_exists('BL_Class_Not_Found') исключение бросать не нужно.
Как быть:
1) внутри лоадера бектрейсом смотреть наличие class_exists?
2) оборачивать class_exists try-catch? -
Июнь 15, 2010, 12:08 п.п., спустя 32 минуты 31 секунду
тебе не надо самому вызывать исключение в автолоадере. не найден и ладно. дальше не его забота. а для class_exists указывай необязательный параметр autoload.Спустя 47 сек.проще будь, короче. тогда не будет проблемм.ιιlllιlllι унц-унц -
Июнь 15, 2010, 12:19 п.п., спустя 11 минут 1 секунду
а для class_exists указывай необязательный параметр autoload.
он по умолчанию Ъ, что мне и нужнотебе не надо самому вызывать исключение в автолоадере
да ну… Имхо все логично - попытался загрузить класс, которого нет - бамц тебе искл. Ибо иначе будет просто фаталл: не могу создать инстанцию класса, которого нет (а в фатале я бектрейс не могу получить) -
Июнь 15, 2010, 1:06 п.п., спустя 47 минут 2 секунды
да ну… Имхо все логично - попытался загрузить класс, которого нет - бамц тебе искл. Ибо иначе будет просто фаталл: не могу создать инстанцию класса, которого нет (а в фатале я бектрейс не могу получить)
видишь ли, это и в самом деле фатально :)) если нет класса, с которым тебе хочется работать — сушите весла. это не лечится.ιιlllιlllι унц-унц -
Июнь 15, 2010, 1:18 п.п., спустя 12 минут 11 секунд
но если тебе хочется перехитрить самого себя - используй class_exists(classname, TRUE) и потом, если хочешь, генерируй исключение. вне автолоадераιιlllιlllι унц-унц -
Июнь 15, 2010, 1:20 п.п., спустя 1 минуту 17 секунд
оно понятно, но мне нужен эксепшн а не фатал (хотя бы из-за бектрейса).
Короче лана, забейте, проблема высосана из пальцаСпустя 17 сек.вне лоадера - не хочу -
Июнь 15, 2010, 1:25 п.п., спустя 5 минут 3 секунды
это твоё дело.
imho, фатальное это фатальное. пропущенная скобка — это фатально. опечатка в имени класса то же самое.ιιlllιlllι унц-унц -
Июнь 15, 2010, 5:26 п.п., спустя 4 часа 1 минуту 30 секунд
бектрейс
распечатай мне бектрейс после фатал эррора? -
Июнь 15, 2010, 11:19 п.п., спустя 5 часов 52 минуты 34 секунды
я кладу по одному классу в файл, и если файл не найден (!is_file()) печатаю бэктрейсне всё полезно, что в swap полезло -
Июнь 15, 2010, 11:22 п.п., спустя 2 минуты 51 секунду
master, у главрыбы (прости что так называю, но абырвалгом язык не поворачивается назвать, хотя главрыба в моей исторической линии тоже уныло - у меня был сосед в общаге по фамилии Фиш :D, но как грится из двух зол) проблема в том, что автолоад то есть, что он файлы то на ексист то проверят, но! видимо (насоклько я понял) class_exists вызывает тоже автолоад, что в принципе понятно) и у него этот ексепшн вываливается :))Сапожник без сапог -
Июнь 15, 2010, 11:37 п.п., спустя 14 минут 50 секунд
phpdude,
честно говоря не пойму зачем такое надо. обычно class_exists используется перед include
if (!class_exists('Foo', true)) include 'Foo.php';
причём принудительно указывается второй параметр, чтобы class_exists не вызывал __autoload. потому что если class_exists (подразумевающий что не все классы могут быть загружены автоматически) будет вызывать __autoload, это рано или поздно приведёт к фаталу.не всё полезно, что в swap полезло -
Июнь 15, 2010, 11:44 п.п., спустя 7 минут 15 секунд
Короче лана, забейте, проблема высосана из пальца
-
Июнь 15, 2010, 11:52 п.п., спустя 8 минут 14 секунд
master, я думаю тут дело не в этом чуток, там ипа расширяемости была идея, хотя может я неправ.
ну типа
if(class_exists("myclass_extension")) … $extension->create($this);Сапожник без сапог -
Июнь 16, 2010, 4:05 п.п., спустя 16 часов 13 минут 11 секунд
проблема в том, что автолоад то есть, что он файлы то на ексист то проверят, но! видимо (насоклько я понял) class_exists вызывает тоже автолоад, что в принципе понятно) и у него этот ексепшн вываливается :))
100% понимание того, че я хотел. При class_exists автолоад нужен, но эксепшен не нужен. -
Июнь 16, 2010, 4:33 п.п., спустя 27 минут 53 секунды
Абырвалг, так слови исключение, проблема то… или тебе это кажется не красивым? )
Страницы: ← Следующая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!