Почему перехват исключения не работает? Доброго времени суток.
Сделал вот такой код:getMessage();
}
В браузере имею пустую страницу, почему?
И ещё вопрос: можно ли все типы исключений отлавливать сразу с помощью Throwable? Или существуют другие способы (без перечисления всех типов)?
Благодарю за ответы.

21 Авг 2019 в 07:00
183 +1
0
Ответы
1

Доброго времени суток!

В вашем коде не отображается ничего в браузере, потому что исключение не перехватывается из-за того, что вы вызываете функцию foo с аргументом, который не является строкой. Однако, вы также не указали, что ваша функция может выбрасывать исключение в сигнатуре функции. Для того чтобы исключение было перехвачено, вам нужно сначала изменить сигнатуру функции foo, чтобы она явно указывала, что может выбросить исключение Exception. Вот исправленный код:

function foo(string $m): void {
if (!is_string($m)) {
throw new Exception('не строка');
}
}
try {
foo(15);
} catch (Exception $e) {
echo 'перехваченное исключение: ' . $e->getMessage();
}

Что касается вашего вопроса о Throwable, то да, вы можете перехватывать все типы исключений сразу через Throwable. Throwable является базовым интерфейсом для всех типов ошибок и исключений, поэтому можно использовать его для перехвата всех возможных исключений без явного перечисления каждого типа. Например:

try {
// Код, который может выбросить исключение
} catch (Throwable $t) {
echo 'перехваченное исключение: ' . $t->getMessage();
}

Надеюсь, это поможет вам разобраться с перехватом исключений. Если у вас есть еще вопросы, не стесняйтесь задавать. Благодарю за внимание!

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир