PHPackages                             masyasmv/otus\_ioc\_container - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. masyasmv/otus\_ioc\_container

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

masyasmv/otus\_ioc\_container
=============================

Домашка IoC

v1.0.0(9mo ago)03PHPPHP ^8.3CI passing

Since Jul 24Pushed 9mo agoCompare

[ Source](https://github.com/MasyaSmv/otus_ioc_container)[ Packagist](https://packagist.org/packages/masyasmv/otus_ioc_container)[ RSS](/packages/masyasmv-otus-ioc-container/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (1)Dependencies (1)Versions (3)Used By (0)

IoC Container (Otus Homework)
=============================

[](#ioc-container-otus-homework)

> **Проект:** Лёгкий Inversion of Control (IoC) контейнер с поддержкой скопов и потокобезопасности.

Оглавление
----------

[](#оглавление)

1. [Описание](#%D0%BE%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5)
2. [Особенности](#%D0%BE%D1%81%D0%BE%D0%B1%D0%B5%D0%BD%D0%BD%D0%BE%D1%81%D1%82%D0%B8)
3. [Требования](#%D1%82%D1%80%D0%B5%D0%B1%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)
4. [Установка](#%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0)
5. [Быстрый старт](#%D0%B1%D1%8B%D1%81%D1%82%D1%80%D1%8B%D0%B9-%D1%81%D1%82%D0%B0%D1%80%D1%82)
6. [Примеры использования](#%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D1%8B-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)

    - [Регистрация команд](#%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D1%8F-%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4)
    - [Разрешение зависимости](#%D1%80%D0%B0%D0%B7%D1%80%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8)
    - [Работа со скопами](#%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81%D0%BE-%D1%81%D0%BA%D0%BE%D0%BF%D0%B0%D0%BC%D0%B8)
7. [Структура проекта](#%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D0%B0-%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B0)
8. [Тестирование](#%D1%82%D0%B5%D1%81%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)
9. [CI/CD](#cicd)
10. [Лицензия](#%D0%BB%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D1%8F)

---

Описание
--------

[](#описание)

Данный репозиторий содержит реализацию собственного IoC контейнера, разработанного в рамках домашнего задания курса "Расширяемая фабрика и IoC" на Otus. Контейнер предоставляет единый фасадный метод `IoC::Resolve(string $key, mixed ...$args)`, позволяющий:

- Регистрировать зависимости (фабрики команд) в глобальном или локальном скопе.
- Разрешать зависимости по ключу, создавая соответствующие объекты.
- Управлять скопами для изоляции контекста (например, отдельные игры или потоки).
- Потокобезопасно хранить собственное состояние через ключ `Scopes`.

Особенности
-----------

[](#особенности)

- **Один фасадный метод** — все операции идут через `IoC::Resolve`.
- **Скопы** — возможность создавать и переключаться между разными наборами зависимостей.
- **Потокобезопасность** — контейнер может работать в параллельных средах без конфликтов.
- **Макро-команда** — поддержка компоновки нескольких команд в едином объекте.
- **Лёгкая интеграция** — PSR-4 автозагрузка, минимум зависимостей.

Требования
----------

[](#требования)

- PHP 8.3 или выше
- Composer
- Xdebug (для сбора покрытия тестов)

Установка
---------

[](#установка)

```
# Клонируем репозиторий
git clone https://github.com/MasyaSmv/otus_ioc_container.git
cd otus_ioc_container

# Устанавливаем зависимости
composer install

# (Опционально) оптимизируем автозагрузку
composer dump-autoload -o
```

Быстрый старт
-------------

[](#быстрый-старт)

```
