Почему перехват исключения не работает? Доброго времени суток. Сделал вот такой код:getMessage(); } В браузере имею пустую страницу, почему? И ещё вопрос: можно ли все типы исключений отлавливать сразу с помощью Throwable? Или существуют другие способы (без перечисления всех типов)? Благодарю за ответы.
В вашем коде не отображается ничего в браузере, потому что исключение не перехватывается из-за того, что вы вызываете функцию 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(); }
Надеюсь, это поможет вам разобраться с перехватом исключений. Если у вас есть еще вопросы, не стесняйтесь задавать. Благодарю за внимание!
Доброго времени суток!
В вашем коде не отображается ничего в браузере, потому что исключение не перехватывается из-за того, что вы вызываете функцию 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();
}
Надеюсь, это поможет вам разобраться с перехватом исключений. Если у вас есть еще вопросы, не стесняйтесь задавать. Благодарю за внимание!