zkrvndm
@zkrvndm
Архитектор решений

Как перехватить все существующие типы исключений?

Существует ли какой-нибудь способ указать в catch, чтобы перехватывалось вообще все что существует? Без необходимости прописывать свой блок под каждый существующий тип исключения. Проблема даже не в том, что мне так уж трудно это сделать, просто я тупо не знаю какие типы исключений вообще бывают, это уже не говоря о кастомных типах.

<?php

try {

    test(); // Тестовая ошибка

}

catch (Error $e) {

    echo 'Получена ошибка из файла «'.$e->getFile().'» в '.$e->getLine().' строке: ' . $e->getMessage();

}

catch (Exception $e) {

    echo 'Получено исключение из файла «'.$e->getFile().'» в '.$e->getLine().' строке: ' . $e->getMessage();

}
  • Вопрос задан
  • 168 просмотров
Решения вопроса 2
ipatiev
@ipatiev Куратор тега PHP
Потомок старинного рода Ипатьевых-Колотитьевых
Если вы тупо не знаете, какие бывают типы исключений, то это легко исправить, посмотрев в документации.
Там написано, что объекты исключений имеют иерархическую структуру, и самым общим предком является интерфейс Throwable.

Отдельно следует отметить, что за использование try catch чтобы тупо написать "Получена ошибка" надо бить по рукам. Так никогда не надо делать. Это глупо и бессмысленно. РНР и сам прекрасно выведет и $e->getFile(), и $e->getLine(), и даже $e->getMessage(), и помогать ему в этом не надо.

Исключение надо ловить только тогда, когда есть определенный сценарий обработки. Например, в случае, если test() выполнилась с ошибкой, то вызвать test2().
Но главное - внутри блока catch ничего не выводить пользователю.
Общением с пользователем должны заниматься только специально предназначенные для этого блоки программы. А не любая строчка, которой вдруг захотелось это сделать.

Поэтому в данном конкретном случае ваша задача еще больше упрощается - не надо ловить вообще никакое исключение.
Ответ написан
@random362
Да, ловить \Throwable
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Vitsliputsli
Я их ловлю не для того, чтобы вывести, а чтобы отправить себе в телеграм.

Тогда просто настройте парсинг логов. Держать такую логику в обработчике исключений сомнительная затея, не говоря уже о том, что ошибка может произойти до регистрации обработчика, или в самом обработчике.
А лучше настройте нормальную визуализацию ошибок, например Elastic+Kibana, а там уже по создавайте алерты по которым будут кидаться сообщения в телеграм. В сообщении будет просто ссылка на лог в Кибане, где можно будет увидеть не только ошибку, но и что ей предшествовало.
Ответ написан
Ваш ответ на вопрос

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

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