sverel
Новичок
Зачем нужны throw Exception?
С момента выхода ПХП-5 пытаюсь перейти от set_error_handler('myErrorHandler'); к этой модной технике, но каждый раз меня останавливает мысль: нафига? Ведь и так всё отлично работает. Моя ф-ция myErrorHandler() универсальна(php4-5), выводит подробные сообщения, дампит $_REQUEST, выводит трассировку и в зависимости от сотояния константы DEBUG_MODE либо посылает сообщение на мыло и показывает белую страницу "извините, сайт не доступен", либо сразу отображает. Ах да, она ещё решает: нужно ли на этом остановить выполнение скрипта, либо только уведомить и продолжить работу. А что ещё нужно?
Развесив везде try/catch, всё равно придётся вешать set_error_hendler, ведь обычные notice/warning - тоже надо красиво показывать. А там где некоторые пишут throw, я пишу trigger_error(...);
Ещё однин минус, то что блок try/catch невозможно вынести в ф-цию или отдельный файл. У меня есть несколько точек входа в систему (публичная часть, админка, flshApi) и везде надо будет копипастить ОДИН И ТОТ ЖЕ КУСОК КОДА! Это уже противоречит всем моим низкоуровневым принципам.
А свой set_error_handler('myErrorHandler'); я вынес в core.php - он же во всех точках входа подключается.
Единственное почему я ещё не забил на try/catch - так это потому что всегда когда пытаешся прикрутить какую-либо библиотечку (PEAR, ZF) - все они кидаются throw Exception-ами.
Может кто-нибудь толково объяснить, чем try/catch реально ВЫГОДНЕЕ/УДОБНЕЕ set_error_handler-а ?
Ну кроме того, что в статье написано: "Exceptions (исключения) - это неотъемлемая часть любого СОВРЕМЕННОГО языка" - не аргумент.
P.S.> админам: наверное это должно быть в "теории программирования", но правила я читаю.
С момента выхода ПХП-5 пытаюсь перейти от set_error_handler('myErrorHandler'); к этой модной технике, но каждый раз меня останавливает мысль: нафига? Ведь и так всё отлично работает. Моя ф-ция myErrorHandler() универсальна(php4-5), выводит подробные сообщения, дампит $_REQUEST, выводит трассировку и в зависимости от сотояния константы DEBUG_MODE либо посылает сообщение на мыло и показывает белую страницу "извините, сайт не доступен", либо сразу отображает. Ах да, она ещё решает: нужно ли на этом остановить выполнение скрипта, либо только уведомить и продолжить работу. А что ещё нужно?
Развесив везде try/catch, всё равно придётся вешать set_error_hendler, ведь обычные notice/warning - тоже надо красиво показывать. А там где некоторые пишут throw, я пишу trigger_error(...);
Ещё однин минус, то что блок try/catch невозможно вынести в ф-цию или отдельный файл. У меня есть несколько точек входа в систему (публичная часть, админка, flshApi) и везде надо будет копипастить ОДИН И ТОТ ЖЕ КУСОК КОДА! Это уже противоречит всем моим низкоуровневым принципам.
PHP:
<?php
try {
$controller->go(); // или $adminController->go(); или $flashApiController->go();
} catch (DatabaseException $e) {
print "Невозможно создать соединение с базой данных. Причина: " . $e->getMessage();
} catch (UserNotFoundException $e) {
print "Пользователя не существует";
} catch (MailServiceException $e) {
print "Ошибка отправки письма: " . $e->getMessage();
} catch (Exception $e) {
print "Общая ошибка: " . $e->getMessage();
}
?>
Единственное почему я ещё не забил на try/catch - так это потому что всегда когда пытаешся прикрутить какую-либо библиотечку (PEAR, ZF) - все они кидаются throw Exception-ами.
Может кто-нибудь толково объяснить, чем try/catch реально ВЫГОДНЕЕ/УДОБНЕЕ set_error_handler-а ?
Ну кроме того, что в статье написано: "Exceptions (исключения) - это неотъемлемая часть любого СОВРЕМЕННОГО языка" - не аргумент.
P.S.> админам: наверное это должно быть в "теории программирования", но правила я читаю.