# Иерархия исключений Все исключения XC_VM расширяют `XcVmException`, что позволяет перехватывать всё дерево одним `catch`-блоком или точечно таргетировать отдельную подсистему. --- ## Дерево ``` \Exception └── XcVmException ├── Container │ └── ContainerException (PSR-11 ContainerExceptionInterface) │ ├── CircularDependencyException │ ├── ServiceCreationException │ └── NotFoundException (PSR-11 NotFoundExceptionInterface) └── Module └── ModuleException ├── ModuleNotFoundException ├── ModuleLoadException ├── ModuleManifestException └── ModuleCycleException ``` --- ## Исключения контейнера | Класс | Когда бросается | | ----- | --------------- | | `ContainerException` | Базовый класс для всех сбоев контейнера | | `CircularDependencyException` | В графе фабрик сервиса обнаружен цикл | | `ServiceCreationException` | Фабричный callable выбросил исключение при создании сервиса | | `NotFoundException` | `get($id)` вызван для незарегистрированного сервиса | `NotFoundException` реализует оба PSR-11-интерфейса, обеспечивая совместимость: ```php try { $service = $container->get('unknown'); } catch (NotFoundException $e) { // PSR-11 NotFoundExceptionInterface } ``` --- ## Исключения модулей | Класс | Когда бросается | | ----- | --------------- | | `ModuleException` | Базовый класс для всех сбоев модуля | | `ModuleNotFoundException` | Обязательная зависимость-модуль отсутствует | | `ModuleLoadException` | Файл модуля не может быть загружен или класс не найден | | `ModuleManifestException` | `module.json` отсутствует, некорректен или не проходит валидацию | | `ModuleCycleException` | Граф зависимостей содержит цикл | --- ## Перехват по подсистеме ```php // Перехватить любое исключение XC_VM try { $loader->loadAll(); } catch (XcVmException $e) { logger()->error($e->getMessage()); } // Перехватить только ошибки модулей try { $loader->loadAll(); } catch (ModuleException $e) { // ModuleNotFoundException | ModuleLoadException | ... } // Перехватить только ошибки контейнера try { $container->get('missing'); } catch (ContainerException $e) { // CircularDependencyException | NotFoundException | ... } ``` --- ## Расположение ``` src/Core/Exception/ ├── XcVmException.php ├── Container/ │ ├── ContainerException.php │ ├── CircularDependencyException.php │ ├── ServiceCreationException.php │ └── NotFoundException.php └── Module/ ├── ModuleException.php ├── ModuleNotFoundException.php ├── ModuleLoadException.php ├── ModuleManifestException.php └── ModuleCycleException.php ``` ## Связанные файлы | Файл | Роль | | --- | --- | | `src/Core/Exception/` | Базовые классы исключений и иерархия проекта |