76 / 62 / 24
Регистрация: 21.06.2013
Сообщений: 330
|
||||||
1 | ||||||
Обработка исключений - какова лучшая практика в этом вопросе?12.06.2014, 18:47. Показов 1685. Ответов 18
Метки нет (Все метки)
А какова лучшая практика в этом вопросе?
Допустим я не знаю в каком месте у меня произойдёт ошибка, но я хотел бы эту ошибку видеть. В связи с этим catch использовать уже не представляется возможным. Что тогда остаётся? set_error_handler говорят устарел. Хорошо, а что тогда? Нарыл вот такой подход. Предлагается сделать класс расширяющий Exception и вот такую конструкцию:
Что скажут мэтры?
0
|
12.06.2014, 18:47 | |
Ответы с готовыми решениями:
18
Реализация CRUD операций с большим количеством таблиц - лучшая практика? Обработка исключений. Как организовать общий обработчик исключений? Обработка исключений с пмощью структурированной обработки исключений Используется ли такая практика в обработке исключений? |
2432 / 2282 / 594
Регистрация: 27.05.2011
Сообщений: 7,801
|
||||||
12.06.2014, 19:01 | 2 | |||||
такое не поймает (неизвестная функция)
0
|
76 / 62 / 24
Регистрация: 21.06.2013
Сообщений: 330
|
|
12.06.2014, 19:13 [ТС] | 3 |
Насколько я понял из документации register_shutdown_function выполняется при завершении или выходе. Ошибки могут не быть фатальными и следовательно никакого завершения или выхода не произойдёт - это раз. В самой этой функции потом не найти места, где случилось исключение - а это как раз таки и необходимо и класс Exception предоставляет для этого всё необходимое.
0
|
76 / 62 / 24
Регистрация: 21.06.2013
Сообщений: 330
|
|
13.06.2014, 13:58 [ТС] | 5 |
С каких пор исследование документации является демагогией?
Я попробовал register_shutdown_function и вижу, что она работает НЕ ТАК как описано в документации. Вообще-то это баг. Делать программы в расчёте на баги я не собираюсь. В документации чёрным по белому написано: Я не могу вам его показать. Поэтому и вопросы задаю в разделе ДЛЯ НАЧИНАЮЩИХ. Знал бы всё на свете чего бы стал спрашивать? А теперь вы мне покажите рабочий код, где функция зареганная в register_shutdown_function ловит ситуацию открытия несуществующего файла.
0
|
2432 / 2282 / 594
Регистрация: 27.05.2011
Сообщений: 7,801
|
||||||
13.06.2014, 15:26 | 6 | |||||
Ну, вызвалась функция неизвестная, произошла ошибка и скрипт завершился, после завершения вызывается финальная функция.
Докажите С тех, когда вы начинаете говорить ложь Тут исключение как раз нужно. Но для галочки можно и без него:
1
|
76 / 62 / 24
Регистрация: 21.06.2013
Сообщений: 330
|
|
13.06.2014, 15:31 [ТС] | 7 |
Уже доказал, читайте внимательней:
И в чём же я солгал? Ну и что вы показали? Уберите set_error_handler будет без него работать? Нет. О чём ещё говорить?
0
|
2432 / 2282 / 594
Регистрация: 27.05.2011
Сообщений: 7,801
|
|
13.06.2014, 15:38 | 8 |
Что-то является доказанным, когда апонент согласен, что ему что-то доказали. Вы не доказали мне ничего.
Тут Как уже показал пример, он не дает ловить некоторые ошибки, следовательно ваше высказывание ложно.
0
|
76 / 62 / 24
Регистрация: 21.06.2013
Сообщений: 330
|
|
13.06.2014, 15:44 [ТС] | 9 |
Ну т.е. факт того, что функция работает НЕ ТАК как описано в документации вас не смутил и ничего не доказывает. Хорошо. Проехали.
А вы попробуйте не выхватывать предложение из контекста и ещё раз прочитайте ПОЛНОСТЬЮ, что я написал: Попробуйте опровергнуть на примере. Я нигде не утверждал, что Exeception ловит все ошибки. На тот чёрт. что задание звучало так: А про set_error_handler в задании ни слова! А у вас ловит ситуацию именно она!
0
|
2432 / 2282 / 594
Регистрация: 27.05.2011
Сообщений: 7,801
|
||||||
13.06.2014, 15:56 | 10 | |||||
Опять таки для галочки..
0
|
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
|
|
13.06.2014, 16:05 | 11 |
corochoone, вы должны различать исключения генерируемые программистом в случае если произошла ошибка по ходу выполнения и фатальные ошибки.. Рантайм(логические) ошибки программист должен отлавливать, генерировать исключения, которые будут обработаны в нужном месте программы и у него есть все возможности для этого. set_error_handler - это.. для разработчиков фреймворков, когда предполагается отлавливать ошибки самих программистов (криворуких) , которые используют фреймворк и не следят за собой..
0
|
76 / 62 / 24
Регистрация: 21.06.2013
Сообщений: 330
|
|
13.06.2014, 16:10 [ТС] | 12 |
Эта задача не глупее поставленной вами - отследить с помощью Exception вызов неизвестной функции, поскольку это невозможно.
Вот и я удивился, как? Если бы вы написали. что В ДОПОЛНЕНИИ к этой можно ещё использовать register_shutdown_function потому что она ловит вот такую ситуацию, которую не ловит set_error_handler - я бы ничего не сказал, за исключением того, что это недокументированная возможность и что использование register_shutdown_function не позволяет понять в каком месте кода встретился вызов неизвестной функции и вообще почему была вызвана функция register_shutdown_function - из-за ошибки или потому что выполнение скрипта НОРМАЛЬНО завершилось. Добавлено через 2 минуты Безусловно. Но беда в том, что мне нужно отлавливать и то и другое и желательно иметь для этого ЕДИНЫЙ механизм. Собственно поэтому и был задан начальный вопрос. Может быть это вопрос не для начинающих - не знаю, но меня он волнует.
0
|
365 / 372 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
|
|
13.06.2014, 16:17 | 14 |
если вы ловите фатальную ошибку - у вас есть вариант вывести сообщение. скрипт уже упал. больше ничего не будет
0
|
76 / 62 / 24
Регистрация: 21.06.2013
Сообщений: 330
|
|
13.06.2014, 16:27 [ТС] | 15 |
Не совсем верно, как уже показал crautcher
[Fri Jun 13 13:53:09.158753 2014] [:error] [pid 6152] [client 127.0.0.1:36689] PHP Fatal error: Call to undefined function open() in /var/www/mysite.ru/data/index.php on line 8 Но скрипт спокойно продолжает работать после этого.
0
|
2432 / 2282 / 594
Регистрация: 27.05.2011
Сообщений: 7,801
|
|
13.06.2014, 16:53 | 16 |
Только тело функции
Делаем обработчик ошибок. На исключениях или без - как хотите. Также вешаем шатдаун функцию, которая получит последнюю ошибку, убившую скрипт, через error_get_last(). Вот впринципе и у вас лог всех ошибок.
0
|
76 / 62 / 24
Регистрация: 21.06.2013
Сообщений: 330
|
|
13.06.2014, 16:56 [ТС] | 17 |
А каким-то образом всё-таки можно в этой функции получить место, где произошло то, что убило скрипт?
0
|
2432 / 2282 / 594
Регистрация: 27.05.2011
Сообщений: 7,801
|
||||||
13.06.2014, 17:01 | 18 | |||||
Сообщение было отмечено Para bellum как решение
Решение
функция вернет не только текст
0
|
76 / 62 / 24
Регистрация: 21.06.2013
Сообщений: 330
|
|
13.06.2014, 19:22 [ТС] | 19 |
Ну тогда единственное, что меня смущает - это недокументированность особенности работы данной функции. В остальном я вроде удовлетворён. Спасибо!
0
|
13.06.2014, 19:22 | |
13.06.2014, 19:22 | |
Помогаю со студенческими работами здесь
19
Какова практика распространения(дистрибуции) приложений WxErlang? Обработка исключений Обработка исключений Обработка исключений Обработка исключений Обработка исключений Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |