Задать вопрос

Почему современный фрамеворки отказываются от recoverable error?

Собственно вопрос в заголовке.
В нативном php вызов функции, например, trigger_error('Моя некритичная ошибка') вызовет сохранение этой информации в лог ну и обработку всякими хендлерами включая внешние типа newrelic. При этом если я руками не вызову эту функцию с E_USER_ERROR, выполнение программы продолжится дальше (опять же согласно документации php). Но если взять фрамеворк (Yii1/2, Laravel) то мы увидим, что создание ошибок вида E_USER_NOTICE/E_USER_WARNING уже вызовет завершение работы приложения. Т.е. мало того, что они выкинули как класс revoverable error, так еще и изменили поведение стандартной функции php.

Простой пример, зачем нужны recoverable error:
Есть сервис в вакууме рассылки смс к которому подключено два шлюза (основной и запасной). Ошибка подключения к основному шлюзу и отправка через запасной - это восстановимая ошибка, так как не возник отказ в обслуживании. Отказ обоих шлюзов - это уже критическая ошибка.

Так вот, в современных фрамеворках я уже не могу так просто бросить себе recoverable error и приходиться городить огород что бы просто мониторить факт отказа основного шлюза.

Вопрос один: зачем они так сделали?
Извините, немного подгорело.
  • Вопрос задан
  • 474 просмотра
Подписаться 3 Оценить 6 комментариев
Пригласить эксперта
Ответы на вопрос 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
что создание ошибок вида E_USER_NOTICE/E_USER_WARNING уже вызовет завершение работы приложения.


error reporting level вы все еще контролируете. Вообще в продакшен коде у нас не должно быть нотисов или варнингов, но иногда проще просто отключить.

В целом все идет к более явной обработке ошибок. Осталось только оператор подавления ошибок убрать.

Есть сервис в вакууме рассылки смс к которому подключено два шлюза (основной и запасной).


Ваша ситуация прекрасно разруливается исключениями.

я уже не могу так просто бросить себе recoverable error и приходиться городить огород


Научитесь пользоваться исключениями. В php7 в принципе даже ошибки парсинга теперь вызывают исключения.
Ответ написан
Ваш ответ на вопрос

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

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