Ответ
Да, постоянно использую try-catch для обработки исключений в PHP. Это основной механизм для контроля ошибок в коде, который может завершиться неудачно, например, при работе с файлами, внешними API или базами данных.
Пример обработки исключения при работе с файлом:
try {
$file = fopen('config.json', 'r');
if ($file === false) {
throw new RuntimeException('Не удалось открыть файл конфигурации.');
}
$content = fread($file, filesize('config.json'));
$config = json_decode($content, true);
} catch (RuntimeException $e) {
// Ловим конкретное исключение
error_log('Runtime Error: ' . $e->getMessage());
$config = []; // Возвращаем конфиг по умолчанию
} catch (Exception $e) {
// Ловим все остальные исключения
throw new Exception('Критическая ошибка конфигурации: ' . $e->getMessage());
} finally {
// Этот блок выполнится в любом случае
if (isset($file) && is_resource($file)) {
fclose($file);
}
}
Ключевые моменты из практики:
- Типизация исключений: Начиная с PHP 7.1, можно ловить несколько типов исключений в одном блоке
catch (RuntimeException | InvalidArgumentException $e). Это делает код чище. - Throwable: В PHP 7+ все ошибки и исключения реализуют интерфейс
Throwable. Поэтому для перехвата любых фатальных ошибок (кроме некоторых, вроде памяти) можно использоватьcatch (Throwable $e). - Без переменной: В PHP 8.0+ можно опустить переменную исключения, если она не нужна:
catch (RuntimeException) {}. - Вложенность: Исключения можно выбрасывать заново (
throw $e;) внутриcatchилиfinallyблока для проброса наверх по стеку вызовов.