PHPackages                             yetanother/di - 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. [Framework](/categories/framework)
4. /
5. yetanother/di

ActiveLibrary[Framework](/categories/framework)

yetanother/di
=============

Yet another php dependency injection container

112PHP

Since Jul 29Pushed 12y ago2 watchersCompare

[ Source](https://github.com/yetanotherphp/di)[ Packagist](https://packagist.org/packages/yetanother/di)[ RSS](/packages/yetanother-di/feed)WikiDiscussions master Synced 2mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

PHP Dependency Injection Container
==================================

[](#php-dependency-injection-container)

YetAnother DI — гибкий DI-контейнер, создающий экземпляры классов и их зависимости на основании параметров конструктора класса. Вам больше не потребуются конфиги, описания зависимостей, именование сервисов, или анонимные функции — всю информацию о связях контейнер будет брать из конструкторов. В отличии от популярных DI-контейнеров, данный контейнер работает только c Singletone'ами, т.е. с объектами, которые создаются 1 раз.

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

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

Рекомендуемая установка через [composer](http://getcomposer.org):

```
{
    "require": {
        "yetanother/di": "dev-master"
    }
}
```

Создание контейнера
-------------------

[](#создание-контейнера)

```
use YetAnother\DI\Container;

$container = new Container();
```

Создание объектов
-----------------

[](#создание-объектов)

```
$myObject = $container->get('MyClass');
// или
$myObject = $container['MyClass'];
```

Получение объектов
------------------

[](#получение-объектов)

При создании объекта, контейнер автоматически его сохраняет. Получение уже созданного объекта выполняется той же фунцией:

```
$myObject = $container->get('MyClass');
// или
$myObject = $container['MyClass'];
```

Проверка существования
----------------------

[](#проверка-существования)

```
$container->has('MyClass'); // true/false
// или
isset($container['MyClass']);
```

Ручное добавление объектов
--------------------------

[](#ручное-добавление-объектов)

```
$myObject = new MyClass();
$container->push($myObject);
// или
$container[] = $myObject;

// после добавления можно получить доступ к объекту по имени класса:
$container->get('MyClass') === $myObject; // true
```

Удаление объектов из контейнера
-------------------------------

[](#удаление-объектов-из-контейнера)

```
$container->remove('MyClass');
// или
unset($container['MyClass']);
```

Создание объектов с зависимостями
---------------------------------

[](#создание-объектов-с-зависимостями)

Допустим, класс MyModel зависит от класса Database, и эта зависимость описана в конструкторе:

```
class MyModel
{
    private $db;

    public function __construct(Database $db)
    {
        $this->db = $db;
        echo 'MyModel created';
    }
}
class Database()
{
    public function __construct()
    {
        echo 'Database created';
    }
}
```

Тогда, при создании объекта класса MyModel, сначала будет создан объект Database:

```
$myModel = $container->get('MyModel');
// Database created
// MyModel created
```

Но, если объект класа Database уже создан и хранится в контейнере, то он будет передан в конструктор MyModel, т.е. второй раз создаваться уже не будет:

```
$db = $container->get('Database');
// Database created
$myModel = $container->get('MyModel');
// MyModel created
```

Таким образом, создаются все зависимости по цепочке.

Добавление функционала при создании объектов
--------------------------------------------

[](#добавление-функционала-при-создании-объектов)

Если вам необходимы дополнительные действия при создании объектов, можно описать их в анонимной функции:

```
$container->set('Database', function () {
    $db = new Database();
    $db->connect();
    return $db;
});
// или
$container['Database'] = function () {...};
```

Для того чтобы использовать объекты в анонимной функции, передайте их в качестве параметров функции:

```
$container->set('UserModel', function (Database $db, Session $session) {
    ...
});
```

Зависимости от контейнера
-------------------------

[](#зависимости-от-контейнера)

Наряду с любыми объектами, вы можете использовать сам контейнер в качестве зависимости, но это делать не рекомендуется, т.к. при таком подходе сложно отследить связи между классами, а также усложняется процесс тестирования.

```
class MyClass
{
    public function __construct(Container $container)
    {
        ...
    }
}
```

```
$container->set('MyClass', function (Container $container) {
    ...
});
```

###  Health Score

21

—

LowBetter than 19% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity7

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity41

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 80% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/dd4b72ef687e4f49f7fa2d7131d9337ec6bba7c4760ca17fbbef9d0b1a955be6?d=identicon)[yetanother](/maintainers/yetanother)

---

Top Contributors

[![heorshe](https://avatars.githubusercontent.com/u/5097270?v=4)](https://github.com/heorshe "heorshe (4 commits)")[![yetanotherphp](https://avatars.githubusercontent.com/u/5096999?v=4)](https://github.com/yetanotherphp "yetanotherphp (1 commits)")

### Embed Badge

![Health badge](/badges/yetanother-di/health.svg)

```
[![Health](https://phpackages.com/badges/yetanother-di/health.svg)](https://phpackages.com/packages/yetanother-di)
```

###  Alternatives

[laravel/telescope

An elegant debug assistant for the Laravel framework.

5.2k67.8M192](/packages/laravel-telescope)[spiral/roadrunner

RoadRunner: High-performance PHP application server and process manager written in Go and powered with plugins

8.4k12.2M84](/packages/spiral-roadrunner)[nolimits4web/swiper

Most modern mobile touch slider and framework with hardware accelerated transitions

41.8k177.2k1](/packages/nolimits4web-swiper)[laravel/dusk

Laravel Dusk provides simple end-to-end testing and browser automation.

1.9k36.7M259](/packages/laravel-dusk)[laravel/prompts

Add beautiful and user-friendly forms to your command-line applications.

708181.8M596](/packages/laravel-prompts)[cakephp/chronos

A simple API extension for DateTime.

1.4k47.7M121](/packages/cakephp-chronos)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
