Старый подход «вернуть false и записать ошибку в LAST_ERROR» уходит в прошлое. В D7 используется механизм исключений (Exceptions), который делает код более надежным и предсказуемым.
1. Иерархия исключений
Все исключения ядра наследуются от \Exception. Основные типы:
- \Bitrix\Main\SystemException: Базовое системное исключение.
- \Bitrix\Main\ArgumentException: Неверный аргумент функции.
- \Bitrix\Main\ArgumentNullException: Аргумент не должен быть пустым.
- \Bitrix\Main\ArgumentTypeException: Неверный тип аргумента.
- \Bitrix\Main\ObjectNotFoundException: Объект не найден.
- \Bitrix\Main\Db\SqlQueryException: Ошибка в SQL-запросе.
2. Правильный блок try-catch
Оборачивайте рискованные операции (запросы к БД, внешним API, работу с файлами) в блок try-catch.
use Bitrix\Main\Loader;
use Bitrix\Main\SystemException;
use Bitrix\Main\ArgumentException;
try {
if (!Loader::includeModule('my.module')) {
throw new SystemException('Модуль my.module не найден');
}
$result = MyClass::doSomething($params);
if (!$result) {
throw new SystemException('Ошибка выполнения операции');
}
} catch (ArgumentException $e) {
// Ошибка в аргументах (например, неверный тип)
echo "Ошибка входных данных: " . $e->getMessage();
} catch (SystemException $e) {
// Системная ошибка
// Записываем в лог
$application = \Bitrix\Main\Application::getInstance();
$application->getExceptionHandler()->writeToLog($e);
echo "Произошла внутренняя ошибка. Мы уже работаем над этим.";
} catch (\Exception $e) {
// Любые другие ошибки
echo "Неизвестная ошибка: " . $e->getMessage();
}3. Логирование ошибок (ExceptionHandler)
Чтобы ошибка не пропала бесследно, её нужно записать в журнал. В D7 для этого есть ExceptionHandler.
use Bitrix\Main\Application;
try {
// ... код ...
} catch (\Throwable $e) {
// Получаем обработчик ошибок
$exceptionHandler = Application::getInstance()->getExceptionHandler();
// Пишем исключение в лог (по умолчанию в /bitrix/modules/main.log или системный лог)
$exceptionHandler->writeToLog($e);
}Настройки логирования задаются в файле .settings.php в секции exception_handling. Там можно указать путь к лог-файлу, уровень детализации и т.д.
Вывод:
Использование исключений позволяет четко разделить «нормальный» ход выполнения программы и обработку аварийных ситуаций.
Всегда ловите исключения и обязательно логируйте их через ExceptionHandler для последующего анализа.
обработка ошибок битрикс, исключения D7, SystemException, ArgumentException, try-catch, ExceptionHandler, логирование ошибок, writeToLog