T
TIMOFEEV Tech Talk
@timofeev_tech_talk112 подп.
310просмотров
8 августа 2024 г.
statsScore: 341
4 из 8 Обработка исключений и ошибок Нужно более тщательно обрабатывать ошибки, ловить exceptions, чтобы скрипт не падал в случае какой-то ошибки, которой можно пренебречь. Например, не удалось обработать одно из сообщений из брокера очередей, это не значит, что мы должны остановить обработку очереди. Решение простое, обернуть процессинг в try-catch <?php ... while (shouldStop() === false) { ... try { &#036;messageProcessor->process(&#036;message); } catch (Throwable) { // тут стоит добавить логирование } ... } ... Так мы обработаем исключения, но остаются ещё ошибки. Для решения этой задачи я предлагаю конвертировать ошибку в исключение и обрабатывать её в стандартном флоу. Это можно сделать с помощью set_error_handler . <?php ... set_error_handler( callback: static function (int &#036;code, string &#036;message, string &#036;filename, int &#036;line) { throw new ErrorException( message: &#036;message, code: &#036;code, filename: &#036;filename, line: &#036;line, ); }, error_levels: E_ERROR | E_PARSE | E_CORE_ERROR | E_USER_ERROR ); while (shouldStop() === false) { ... try { &#036;messageProcessor->process(&#036;message); catch (Throwable) { // сюда будут попадать и исключения и ошибки } ... } .. Нужно продумать, что именно указать в error_levels и что лучше подходить для вашего случая. Я обычно ставлю E_ALL , но для прода игнорирую E_WARNING, E_DEPRECATED. Такие предупреждения, как правило, не доходят до прода, но если так случилось, что они выстрелили в проде, то пытаемся обработать ситуацию как есть. Возможно для вашего кейс E_WARNING будет критичным, и его стоит обрабатывать как ошибку.
310
просмотров
1777
символов
Нет
эмодзи
Нет
медиа

Другие посты @timofeev_tech_talk

Все посты канала →
4 из 8 Обработка исключений и ошибок Нужно более тщательно о — @timofeev_tech_talk | PostSniper