Преимущества механизма исключений

tony2001

TeaM PHPClub
Изменение поведения одного и того же кода в зависимости от контекста - это против любой логики.

Кстати, я тоже недавно читал, что сутки хотят сделать в 30 часов..
Но что-то всё нет и нет..
 

alex_kh

Новичок
Автор оригинала: tony2001
Изменение поведения одного и того же кода в зависимости от контекста - это против любой логики.
Ну, тут я не согласен.
Допустим, PHP приложение написано исключительно в обьектном виде. И все его модули(тоже обекты) выполняются в пространстве имен "главного" обекта-приложения.
Все инкапсулировано.
Внутри "капсулы" творим чего захотим.
 

whirlwind

TDD infected, paranoid
аськинлог
------------------------------
C> они самые =)
или
perldoc -f eval =)

W> не понял, при чем тут перлдок? мне ваще для понимания бы чего нить, а то я не врубаюсь какой от них толк

C> а тол к в том что какую-то ошибку ты можешь обработать так, чтобы она не вырубила твою прогу

делаю
require 'blablalba.pm', а в этом файле синтаксическая ошибка - всему скрипту [censored].

а вот и обработка

eval { require 'blablalba.pm' };
if($@){
warn "[censored]! Модуль кривой!"
}

W> хм... т.е. так что ли получается?

//try
eval
//catch
warn

W> а вообще для обычной обработки ошибок это не катит?
ну в смысле хорошо или плохо?

C> исключение - это критическая ошибка.
фаталнах эррор. все умерли =))
----------------------
ИМХО доходчиво

-~{}~ 27.12.05 15:50:

PS. А это из рекомендаций MSDN-а

Все ветви кода, которые приводят к генерации исключений, должны предоставлять метод проверки успешного выполнения, не генерирующий исключения. Например, чтобы устранить исключение FileNotFoundException, можно вызвать File.Exists. Данный подход всегда возможен, но его целью является отсутствие генерации исключений при нормальном выполнении.

...

Не следует использовать исключения для обычных или ожидаемых ошибок или для обычного потока управления.
Для наиболее общих часто встречающихся ошибок следует возвращать пустое значение. Например, команда File.Open возвращает пустую ссылку, если файл не найден, но создает исключение, если он заблокирован.
Разрабатывать классы следует таким образом, чтобы при обычном процессе использования исключения никогда не возникали. В следующем примере кода класс FileStream предоставляет еще один способ определить, достигнут ли конец файла, чтобы избежать возникновения исключения, которое генерируется, если разработчик попытается осуществить чтение за концом файла.
 
Сверху