Ответ
Да, это основа обработки ошибок в современном PHP. Механизм исключений позволяет отделить нормальный поток выполнения от обработки ошибок, делая код чище.
Базовое использование:
try {
$file = fopen('important.txt', 'r');
if (!$file) {
throw new Exception('Не удалось открыть файл для чтения.');
}
// Работа с файлом...
} catch (Exception $e) {
// Логируем и/или показываем пользователю понятное сообщение
error_log('File error: ' . $e->getMessage());
echo 'Произошла ошибка при обработке файла.';
}
Создание собственных (кастомных) исключений — это лучшая практика для семантической группировки ошибок:
class ValidationException extends InvalidArgumentException {}
class FileNotFoundException extends RuntimeException {}
class ApiConnectionException extends RuntimeException {
public function __construct(string $url, int $code = 0, Throwable $previous = null) {
parent::__construct("Не удалось подключиться к API: $url", $code, $previous);
}
}
// Использование:
try {
if (!$user->isValid()) {
throw new ValidationException('Некорректные данные пользователя');
}
} catch (ValidationException $e) {
// Обработка именно ошибки валидации
}
Ключевые методы класса Exception (и его родителя Throwable), которые я часто использую для отладки и логирования:
getMessage()— сообщение об ошибке.getCode()— числовой код исключения.getFile()иgetLine()— где было выброшено исключение.getTrace()иgetTraceAsString()— стек вызовов.
Начиная с PHP 7, появился тип Throwable (интерфейс, который реализуют и Exception, и Error), что позволяет ловить как исключения, так и фатальные ошибки (через Error).