Тупые вопросы про Exception

Silentland

Новичок
Хочу разобраться как лучше обрабатывать исключительные ситуации. Собственно ради этого и создавал топик. Есть класс, который работает с файлами. Он генерирует исключения связанные с загрузкой файлов, собственно, правильно ли выносить их обработчик за пределы класса, нужно ли использовать для этого try-catch и т.п.
 

WMix

герр M:)ller
Партнер клуба
не могу сказать, то что в разных файлах ореентируешься на некий код "цифру" исключения, говорит что не правильно, это не удобно, это непонятно,.. а вообще я за свои 12 лет работы в PHP таких реализаций не встречал!
 

Silentland

Новичок
А какие встречал? Я бы как раз и хотел услышать, что так ни делает никто, делают вот так... Задача то не сложная: загрузка/удаление файла аяксом, возврат id записи в БД в случае удачи и пояснения для пользователя в случае ошибки. Возврат пояснения, наверное, в текстовом виде... либо кодом ошибки, а интерпретация уже на стороне клиента. Тут тоже не понятно как лучше.
 

WMix

герр M:)ller
Партнер клуба
еслиб я это писал, яб разделил бы логику ввода данных от пользователя (form), логику записи файлов (file_transfer) и логику записи в базу (model).. у меня былиб совершенно другие исключения, твои описанные исключения, были бы у сообщениями пользователю на уровне контроллера.
по моему мнению, исключения нужны чтоб программиста ткнуть носом: тут "чтото забыл", это, в твоем случае, папки не существует, нет прав для записи, нет свободного места вообще (не в альбоме) и тд. когда метод ожидает некие предпосылки, но они, как это по русски, не удовлетворены чтоли...
 

Silentland

Новичок
Читал. Не считая выделение логики записи в БД, что у меня не так? В блоке catch исключения могут быть переданы контроллеру или в любое другое место, пожалуйста. Но вопрос-то где размещать блок catch остается. Использовать if-else или try-catch остается...
 

Фанат

oncle terrible
Команда форума
Ну теперь можно и на мой вопрос ответить)
Где обычно принято кушать? Дома, поближе к горшку? или подальше, в кафе/ресторане? Что выбрать если есть альтернатива? Какими принципами руководствоваться?
 

WMix

герр M:)ller
Партнер клуба
это твоя задумка... можешь сделать внутненний обработчик, можешь внешний...
но как бы там нибыло сделай свой класс исключений...

если это контроллер, то try, catch... если библиотека или модель то throw...
хотя и в библиотеках и модулях могут быть try, catch блоки...

яб писал на ошибки приложение/пользователь if на приложение/разработчик throw

не забываем, что при работе с пользователем может возникнуть исключение (вызван не существующий ресурс, нет связи с базой данных, ... [это все инфа для разработчика]) но пользователь это исключение видеть не должен
 

Silentland

Новичок
Скорее библиотекой будет. Сделаю свой класс исключений, тоже думал об этом.

Тут http://wiki.agiledev.ru/doku.php?id=ooad:exception_using вычитал про типы исключений
Условно исключения можно разделить на три типа:

контролируемые;
некотролируемые;
фатальные.
Контролируемые исключения могут происходить при нормальном выполнении системы и в большинстве своем характеризуют такие ситуации, как ошибки соединения с внешним сервисом, неверный пользовательский ввод и т.д.

Некотролируемые исключения – это исключения, которые возникают вследствие выполнения некорректного кода. Эти исключения, как правило, могут быть перехвачены, но исправлению подлежат лишь в единичных случаях. К таким исключениям относят исключения возникающие при обращении по нулевому указателю, вызове несуществующего или защищенного метода, в результате неверного приведения типов и т.д.

Фатальные исключения описывают ошибки, большую часть которых приложение не должно перехватывать. К ним относятся такие ситуации, как нехватка памяти, переполнение стека, попытка оперирования уже уничтоженным потоком приложения, внутренняя ошибка виртуальной машины или интерпретатора и многие другие.

В языке Java различие между этими типами исключений достаточно явно. Контролируемые исключения описываются в прототипе метода и компилятор проверяет, может ли данное исключение быть сгенерировано внутри метода.

void openDoor(Key key) throws InvalidKeyException...
Некотролируемые исключения являются наследниками класса RuntimeException. Такие исключения могут быть сгенерированы самой виртуальной машиной, даже если их класс не объявлен в прототипе метода.
Получается, в java даже пользовательский ввод обрабатывают с помощью throw...
 

AmdY

Пью пиво
Команда форума
Silentland
В джаве другие парадигмы программирования, это php завёлся, выполнил скрипт и умер. Так что таскать нужно осторожно.
 

Silentland

Новичок
Кстати, скажите по опыту есть ли разница в множественной загрузке файлов скопом или по очереди. В последнем случае будет по запросу на каждый файл, но сравнительно с временем загрузки самих файлов стоит ли обращать на это внимание?
 

Фанат

oncle terrible
Команда форума
Чувствую, у тебя ещё много вопросов будет.
Сколько пробелов отступ делать, в каких кавычках опытные программисты строчки пишут и что говорит компьютерная наука про форму скобочек.
 

WMix

герр M:)ller
Партнер клуба
Получается, в java даже пользовательский ввод обрабатывают с помощью throw...
это где ты такое вычитал? услышал звон незная где он....!
 

Silentland

Новичок
Пока досконально разбираюсь в эксепшенах и загрузке файлов. пробелы, отступы это так, если к слову придется) А что там со звоном не так? Языки-то примерно одинаково развиваются...
 

Silentland

Новичок
PHP:
if (file_exists($file)) {
    unlink($file);
}
придется заменить на
PHP:
if (!unlink($file) && file_exists($file)) {
   throw new Exception('не удалось удалить файл');
}
если уж использовать исключения, да и, вообще, так логичнее
 

Silentland

Новичок
Тогда и топики нужно переименовать соответствующим образом, а то гнать из одного в другой с таким же названием противоречит любому здравому смыслу
 
Сверху