littleguga
@littleguga
Не стыдно не знать, а стыдно не интересоваться.

Как правильно поступить?

В случае, если $dbh = new PDO($dsn, $user, $password); выдаст ошибку - показать пользователю картинку с котенком и фразу "ой, что-то сломалось".
Поэтому использовать try..catch нужно только тогда, когда вы собираетесь ОБРАБОТАТЬ ошибку - то есть, совершить какое-то действие, связанное с ФАКТОМ ошибки - откатить транзакцию, например.

Показать пользователю заглушку и прекратить дальнейшее выполнение скрипта подходит под это?
try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    log($e); //см пунктик ниже
    die('<img src="cat.jpg"><br>Ой, что-то сломалось!');
}
...
дальше идет сам скрипт, который будет выполняться только, если мы успешно подключимся

А если я хочу, чтобы в случае ошибки мне отправилось письмо на почту и вся информация(время, ип адрес пользователя, куки, сессия и тд положились в БД или .txt), то я правильно создаю функцию log($e), которая всем этим и занимается?

Заранее благодарен за ответ!
  • Вопрос задан
  • 226 просмотров
Решения вопроса 2
abler98
@abler98
Software Engineer
Ну да, я бы так и сделал :)
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Нет, ну это ад какой-то.
Написано же, русским языком:
- в-третьих, этот код лишает нас возможности обрабатывать все ошибки централизованно, в едином exception handler-е.

человек читает... и старательно наступает на ровно те же самые грабли:
для КАЖДОГО запроса, который может вернуть ошибку (то есть вообще для любого) он собирается писать колбасу из try catch на 6 строк.

Для кого написано про централизованную обработку? Казалось бы - разул глаза, погуглил php exception handler, скопировал по образцу, нарисовал там хоть котиков, хоть слоников, хоть себя без трусов, добавил отправку почты себе поздравление бабушке, соболезнования котику. Все что угодно, но в одном, ОДНОМ месте.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы