|
Rotten ↓
|
 |
|
03 Май, 2011, 02:11:55
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 9
Сообщений: 2088 Сила слова: 0.43
|
Есть, например, клиентский метод в котором мы вызываем апишный метод из другого класса, который кидает исключение(специфическое какоето).
И вот если я хочу по логике кинуть в клиентском методе то самое исключение в блоке catch, которое кидает апишный метод...
Тоесть так:
try{
objectX.doSomething();
}catch(SpecificForObjectXException){
throw new SpecificForObjectXException();
}
Короче говоря, насколько разумный с точки зрения проектирования такой подход? По сути - это делегирование исключния. По дефолту на месте повторного выкидыша исключения в клиенте должно быть всегда чтото другое.. Но вот если мне бы хотелось сохранить и передать то самое исключение так как по логике оно должно отображать суть того самого исключения.
P.S. Честно говоря то что я пробую - не совсем относится к пхп, ибо в случае пхп не надо было бы даже писать try-блок: исключение по цепи бы итак передалось. У меня ситуация, где try-блок писать обязательно т.к. IDE матерится и компилятор пошлет к черту.
Вопрос - скорее всего по базовой теории нежели суто по пхп..
|
|
|
|
|
Записан
|
Жизнь слишком коротка чтобы тратить ее на бестолковое внимание троллям, мудакам, задротам и прочим отбросам общества...
|
|
|
|
vasa_c ↓
|
 |
|
03 Май, 2011, 02:17:19 , спустя 5 минут 24 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: в ухо Карма: 81
Сообщений: 2459 Сила слова: 3.29
|
Что это? Ява?
В пыхе так:
} catch (Exception $e) {
throw $e;
}
|
|
|
|
|
Записан
|
|
|
|
|
kostyl ↓
|
 |
|
03 Май, 2011, 02:33:34 , спустя 16 минут 15 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
занедельный антипаттерн
Группа: Джедаи Карма: 60
Сообщений: 3522 Сила слова: 1.7
|
надо кидат тоже самое исключение если тебе надо еще что то сделать, а так ризона нет
|
|
|
|
|
Записан
|
качество жизни обратно пропорционально количеству лени
|
|
|
|
Timur ↓
|
 |
|
03 Май, 2011, 03:52:16 , спустя 1 час 18 минут 42 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
NullPointerException
Группа: в ухо Карма: 56
Сообщений: 1009 Сила слова: 5.55
|
Если это Java, то почему бы добавить к сигнатуре метода throws?
void someMethod() throws SpecificForObjectXException {
objectX.doSomething();
}
upd
хотя throws по-любому понадобится, если только SpecificForObjectXException не наследует RuntimeException
и вообще это и на Java не похоже
}catch(SpecificForObjectXException){ // где переменная?
|
|
|
|
« Последнее редактирование: 03 Май, 2011, 03:52:01 от Timur »
|
Записан
|
|
|
|
|
master ↓
|
 |
|
03 Май, 2011, 03:49:30 , спустя
|
НЕ ХУЕТА!
ХУЕТА!
|
Квадратов сколько видишь ты?
Группа: Джедаи Карма: 44
Сообщений: 2080 Сила слова: 2.12
|
Исключения можно наследовать:
class DataBaseException extends Exception {}
class RowNotFoundException extends DataBaseException {}
try {
foo ();
} catch (DataBaseException $e){
print 'проблема с чтением данных';
} catch (Exception $e){
// какая-то ещё проблема
}
function foo (){
try {
readRow ();
} catch {RowNotFoundException $e} {
print 'строка не найдена';
throw $e;
}
}
function readRow (){
if (... ) {
throw new RowNotFoundException;
}
}
будет напечатано:
строка не найдена
проблема с чтением данных
|
|
|
|
|
Записан
|
|
|
|
|
Rotten ↓
|
 |
|
03 Май, 2011, 04:50:26 , спустя 1 час 56 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 9
Сообщений: 2088 Сила слова: 0.43
|
Timur, да, на джаве.. а не похоже на джаву ибо писал в коде из пхп.. чето протупил сразу джаву выбрать, но тем не менее..
во-вторых(ближе к делу). Твое решение неплохое... но только на 1й взгляд, потому как это не избавляет нас обрамлять вызов objectX.doSomething(); в блок try/catch(потомучто если иде/компилятор знает о том что оно кидается этим исключением, то он ничего и не выполнит).
Отсюда - у нас остается все тот же блок catch в котором надо чтото сделать..
void someMethod() throws SpecificForObjectXException {
try{
objectX.doSomething();
}catch (specificException e){
// тоесть здесь можно ничего не писать икомпилятор поймет что в случае исключения
// нужно выбросить specificException ?
}
|
|
|
|
|
Записан
|
Жизнь слишком коротка чтобы тратить ее на бестолковое внимание троллям, мудакам, задротам и прочим отбросам общества...
|
|
|
|
Абырвалг ↓
|
 |
|
03 Май, 2011, 05:03:34 , спустя 13 минут 8 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
PHP Infected, симфоеб, маконенавистник
Группа: Джедаи Карма: 80
Сообщений: 6096 Сила слова: 1.31
|
довольно распространенная практика: ловим исключение и бросаем другое, а то, что словили - третьим агрументов в констроуктор ($previous, >= 5.3 only)
|
|
|
|
|
Записан
|
PHP does the job since 1995 Пожалуйста, не надо делать двойные клики по ссылкам. Это создает избыточную нагрузку на сервер
|
|
|
|
Timur ↓
|
 |
|
03 Май, 2011, 05:25:21 , спустя 21 минуту 47 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
NullPointerException
Группа: в ухо Карма: 56
Сообщений: 1009 Сила слова: 5.55
|
Отсюда - у нас остается все тот же блок catch в котором надо чтото сделать..
Да там вообще try/catch не нужен.
Просто допиши throws после списка аргументов и всё - исключение пойдет наверх по стеку вызовов, в поисках первого подходящего catch-блока.
http://www.skipy.ru/technics/exceptions.html
Спустя 4 минуты 45 секунд добавил довольно распространенная практика: ловим исключение и бросаем другое, а то, что словили - третьим агрументов в констроуктор ($previous, >= 5.3 only)
Ну можно и так (в Java вторым аргументом), если есть необходимость, например добавить что-то к данному эксцепшену или "сгруппировать" несколько.
|
|
|
|
|
Записан
|
|
|
|
|
Timur ↓
|
 |
|
03 Май, 2011, 05:32:48 , спустя 7 минут 27 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
NullPointerException
Группа: в ухо Карма: 56
Сообщений: 1009 Сила слова: 5.55
|
потомучто если иде/компилятор знает о том что оно кидается этим исключением, то он ничего и не выполнит
Потому что в Java все исключения (кроме RuntimeException, Error и их наследников) являются проверяемыми (checked), т.е. если в методе возможно исключение, то его нужно либо обработать (try/catch), либо явно указать о том, что метод выбрасывает исключение (throws).
|
|
|
|
|
Записан
|
|
|
|
|
Rotten ↓
|
 |
|
03 Май, 2011, 05:33:12 , спустя 24 секунды
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 9
Сообщений: 2088 Сила слова: 0.43
|
Timur, ок, спасибо..
|
|
|
|
|
Записан
|
Жизнь слишком коротка чтобы тратить ее на бестолковое внимание троллям, мудакам, задротам и прочим отбросам общества...
|
|
|
|
kostyl ↓
|
 |
|
03 Май, 2011, 06:31:38 , спустя 58 минут 26 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
занедельный антипаттерн
Группа: Джедаи Карма: 60
Сообщений: 3522 Сила слова: 1.7
|
но зачем вызвать тот же эксцепшн и ничего не делать я так и не понял...
|
|
|
|
|
Записан
|
качество жизни обратно пропорционально количеству лени
|
|
|
|
Rotten ↓
|
 |
|
03 Май, 2011, 08:07:26 , спустя 1 час 35 минут 48 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
Группа: Адекваты Карма: 9
Сообщений: 2088 Сила слова: 0.43
|
kostyl, есть просто случай где в том блоке по цепочке высше(методу который вызвал клиент, в свою очередь) нужно кинуть ексцепшн того же характера, (без изменений) который относится к апишному методу... Например если апишный может кидать IllegalArgumentException/IllegalStateException, то клиент, в свою очередь являясь лишь составной частью вызова целой цепочки методов из разных классов должен передать высше то исключение, чтобы прекратить работу в случае высшеописанного исключения... а не просто выйти по типу return.
Была идея(очень плохая), исходя из того что апишный метод может кидать 3-4 исключения, то в клиентском методе реализовать возвращаемые числа соответствующие тем исключениям. Тоесть если у нас в клиете - IllegalArgumentException, то он буде возвращать -1, если IllegalStateException - -2, и т.д...
Но идея потому и плоха, что раз мы долбим код в стиле ООП, то лчше придерживаться тех же исключений, но делегированных. Та и к тому же нужно дополнительно все расписать согласно документации - какие возвращаемые числа что значат, либо пообъявлять константы с соответствующими именами.. Нехорошо так...
|
|
|
|
|
Записан
|
Жизнь слишком коротка чтобы тратить ее на бестолковое внимание троллям, мудакам, задротам и прочим отбросам общества...
|
|
|
|
kostyl ↓
|
 |
|
04 Май, 2011, 11:58:40 , спустя 15 часов 51 минуту 14 секунд
|
НЕ ХУЕТА!
ХУЕТА!
|
занедельный антипаттерн
Группа: Джедаи Карма: 60
Сообщений: 3522 Сила слова: 1.7
|
Rotten, тогда наверно правильнее будет сделать так:
try {
objectX. doSomething();
}
catch (SpecificForObjectXException e ) {
throw e;
}
catch (Exception e ) {
// Do somethink
}
|
|
|
|
|
Записан
|
качество жизни обратно пропорционально количеству лени
|
|
|
|