Ответ
Оператор throw в PHP используется для явного выброса исключения (exception). Это прерывает нормальное выполнение программы и передает управление первому подходящему блоку catch в стеке вызовов.
Механика работы:
- При выполнении
throwсоздается объект исключения (обычно экземпляр классаExceptionили его потомка). - Текущий блок кода немедленно прекращает выполнение.
- PHP ищет ближайший охватывающий блок
try-catch, который может поймать этот тип исключения. - Если подходящий
catchнайден, выполняется его код, и программа продолжает работу после блокаtry-catch-finally. - Если подходящий
catchне найден, вызывается глобальный обработчик исключений, и скрипт завершается с фатальной ошибкой (Fatal Error).
Пример с пользовательским исключением:
class InvalidUserException extends InvalidArgumentException {
public function __construct($userId) {
parent::__construct("User with ID {$userId} is invalid or not found.");
}
}
function getUserEmail(int $userId): string {
if ($userId <= 0) {
// Выбрасываем исключение, прерывая функцию
throw new InvalidUserException($userId);
}
// ... логика поиска пользователя
return 'user@example.com';
}
try {
$email = getUserEmail(-5); // Вызовет исключение
echo $email;
} catch (InvalidUserException $e) {
// Ловим конкретный тип исключения
error_log('User error: ' . $e->getMessage());
echo 'Could not retrieve user.';
} catch (Exception $e) {
// Ловим любое другое исключение
echo 'An unexpected error occurred.';
} finally {
// Этот код выполнится в любом случае
echo 'Request processed.';
}
Ключевые моменты:
- В PHP 7+ все исключения реализуют интерфейс
Throwable. Есть два основных ветвления:Exception(для ошибок логики приложения) иError(для критических ошибок движка PHP). - Исключения поддерживают вложенность через
getPrevious(), что полезно для оборачивания низкоуровневых исключений. - Использование
throw— основа современной обработки ошибок в PHP, позволяющая отделить код, генерирующий ошибку, от кода, который ее обрабатывает.