Есть класс A который бросает 2 типа исключений , он использует класс B который тоже 2 исключения бросает.
Есть класс C который использует класс A.
В классе C почти все методы класса вызывают методы классса A.
Обработка некоторых исключений идентична в нескольких методах класса С.
Дабы не плодить повторяющийся код, хочу создать декоратор к классу A который будет ловить его исключения и обрабатывать.
Насколько это правильно?
1. spsu - 25 Апреля, 2013 - 19:11:43 - перейти к сообщению
2. caballero - 25 Апреля, 2013 - 20:38:47 - перейти к сообщению
писать декоратор который ловит исключения - звучит как бред сивой кобылы
try блок должен охватывать весь кусок кода
какой смысл вообще кидать исключения в методах классов и тут же их обрабатывать.
я конечно понимаю что писать с ООП - круто, но бессмысленное нагромождение классов к ООП никакого отношения не имеет.
try блок должен охватывать весь кусок кода
какой смысл вообще кидать исключения в методах классов и тут же их обрабатывать.
я конечно понимаю что писать с ООП - круто, но бессмысленное нагромождение классов к ООП никакого отношения не имеет.
3. spsu - 25 Апреля, 2013 - 21:08:08 - перейти к сообщению
Есть класс HttpClient он брасает два типа исключений, CurlExaption ошибка поражденная curl есть, HttpExcaption бросается если получен HTTP код отличный от 200 и других допустимых.
Есть класс VK который бросает VkApiExcaption который бросается если возникла ошибки VK API есть VkExcaption который бросается в случае внутренних ошибок класса Vk.
VK соответсвенно имеет несколько методов для авторизации, вызова API.
Соответсвенно каждый метод оборачивается в try catch при вызове.
Произошла допустим ошибка vk api выводим сообщения в зависимости от ее кода.
И места в котором она вылезла.
Или например получен Http код 502 значит сервер подвис нужно повторить операцию а не давать сообщение о ошибке.
И.т.д...
Весь код оборачивать не оч. практично.
Есть класс VK который бросает VkApiExcaption который бросается если возникла ошибки VK API есть VkExcaption который бросается в случае внутренних ошибок класса Vk.
VK соответсвенно имеет несколько методов для авторизации, вызова API.
Соответсвенно каждый метод оборачивается в try catch при вызове.
Произошла допустим ошибка vk api выводим сообщения в зависимости от ее кода.
И места в котором она вылезла.
Или например получен Http код 502 значит сервер подвис нужно повторить операцию а не давать сообщение о ошибке.
И.т.д...
Весь код оборачивать не оч. практично.
4. LIME - 25 Апреля, 2013 - 21:17:06 - перейти к сообщению
так могут быть вложенные try catch
и ловить они будут только исключения своего типа либо пробрасывать их дальше
и ловить они будут только исключения своего типа либо пробрасывать их дальше
5. spsu - 25 Апреля, 2013 - 21:55:27 - перейти к сообщению
LIME пишет:
так могут быть вложенные try catch
и ловить они будут только исключения своего типа либо пробрасывать их дальше
и ловить они будут только исключения своего типа либо пробрасывать их дальше
Зачем тут вложенные или я чего-то не понимаю?
Или имеется введу один глобальный для всех которые не обрабатываются, и вложенны для тех которые обрабатываются?
6. LIME - 25 Апреля, 2013 - 22:05:57 - перейти к сообщению
внешний try выводит сообщения
внутренний (у метода) может повторить попытку либо выбросить сообщение для внешнего
внутренний (у метода) может повторить попытку либо выбросить сообщение для внешнего
7. spsu - 25 Апреля, 2013 - 22:34:25 - перейти к сообщению
М.б кому поможет несколько статей по использованию исключений в PHP и вообще их использования:
Как делать надо и не надо, http://wiki[dot]agiledev[dot]ru/doku.php[dot][dot][dot]:exception_using
Использование:
http://habrahabr[dot]ru/post/58702/
http://habrahabr[dot]ru/post/58687/
http://habrahabr[dot]ru/post/100137/
Сделаю как написал LIME.
Как делать надо и не надо, http://wiki[dot]agiledev[dot]ru/doku.php[dot][dot][dot]:exception_using
Использование:
http://habrahabr[dot]ru/post/58702/
http://habrahabr[dot]ru/post/58687/
http://habrahabr[dot]ru/post/100137/
Сделаю как написал LIME.
8. DeepVarvar - 25 Апреля, 2013 - 22:51:20 - перейти к сообщению
caballero пишет:
+100500!я конечно понимаю что писать с ООП - круто, но бессмысленное нагромождение классов к ООП никакого отношения не имеет.
LIME пишет:
Зачем? вложенные try catch
spsu пишет:
Давайте еще определение каждой переменной обернем. Шоп наверняка. Шоп никогда приложение не падало. Ни при каких обстоятельствах.каждый метод оборачивается в try catch при вызове
spsu пишет:
Ты так написал, будто это не ты спрашивал, а у тебя.М.б кому поможет
Лови конкретный ответ на свой вопрос:
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- try {
- // working
- } catch (Exception $e) {
- switch(true) {
- case ($e instanceof yourException1):
- // foo
- break;
- case ($e instanceof yourException2):
- // bar
- break;
- case ($e instanceof yourExceptionN):
- // bazz
- break;
- }
- }
Перед тем как запостить этот ответ, я не поленился зайти по всем ссылкам.
На вкус и цвет... фломастеры разные.. И нигде не было примера под твою задачу.
Пользуйся.