PHPackages                             omarphp/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. [Utility &amp; Helpers](/categories/utility)
4. /
5. omarphp/di

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

omarphp/di
==========

OmarPHP Dependency Injector

v0.1.0(7y ago)041MITPHPPHP &gt;=7.3.0

Since Apr 26Pushed 7y ago1 watchersCompare

[ Source](https://github.com/omar-php/di)[ Packagist](https://packagist.org/packages/omarphp/di)[ RSS](/packages/omarphp-di/feed)WikiDiscussions master Synced 3d ago

READMEChangelog (1)Dependencies (18)Versions (2)Used By (0)

Omar Dependency Injector
========================

[](#omar-dependency-injector)

[![Packagist](https://camo.githubusercontent.com/26f4cac919e83cf9bca97010e57ddc51e42c392cc7f1c246b4c4579f25f13f04/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6f6d61727068702f64692e737667)](https://packagist.org/packages/omarphp/di)[![Build Status](https://camo.githubusercontent.com/47b152a2aa51a09c051dc6ff2213db2294f8a09da504d618ba5d1b45850f72e1/68747470733a2f2f7472617669732d63692e6f72672f6f6d61722d7068702f64692e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/omar-php/di)[![Coverage Status](https://camo.githubusercontent.com/ff42d4c425d98ecea5cf68f125b21643358b0394639db25c5f47c97caeb71df4/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f6f6d61722d7068702f64692f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/github/omar-php/di?branch=master)[![StyleCI](https://camo.githubusercontent.com/dc53fcf58672d50f42bb758185669813bc5c9896ccbd2973071f83e01156203b/68747470733a2f2f6769746875622e7374796c6563692e696f2f7265706f732f3137373238393333362f736869656c643f6272616e63683d6d6173746572)](https://github.styleci.io/repos/177289336)[![Mutation testing badge](https://camo.githubusercontent.com/240648f8d3498f82a9faff4ccc409cc9d3703196f8fe5bb6030d776ec0db2bd1/68747470733a2f2f62616467652e737472796b65722d6d757461746f722e696f2f6769746875622e636f6d2f6f6d61722d7068702f64692f6d6173746572)](https://stryker-mutator.github.io)[![Psalm type coverage](https://camo.githubusercontent.com/e1c62a180f053fa8a6a3e5344a1500015217ebdf99d19a1f1bb741a93b053de7/68747470733a2f2f73686570686572642e6465762f6769746875622f6f6d61722d7068702f64692f636f7665726167652e737667)](https://github.com/vimeo/psalm)

[![Reliability Rating](https://camo.githubusercontent.com/31f155df1a832984b68bd0f60824a9042694890398186b7e4cf9d05e2392f84a/68747470733a2f2f736f6e6172636c6f75642e696f2f6170692f70726f6a6563745f6261646765732f6d6561737572653f70726f6a6563743d6f6d61722d7068705f6469266d65747269633d72656c696162696c6974795f726174696e67)](https://sonarcloud.io/dashboard?id=omar-php_di)[![Maintainability Rating](https://camo.githubusercontent.com/9a4b96aaa5fad3da2795b76c0217c25216116da21f7c9a28f8e074c87cabaf00/68747470733a2f2f736f6e6172636c6f75642e696f2f6170692f70726f6a6563745f6261646765732f6d6561737572653f70726f6a6563743d6f6d61722d7068705f6469266d65747269633d7371616c655f726174696e67)](https://sonarcloud.io/dashboard?id=omar-php_di)[![Quality Gate Status](https://camo.githubusercontent.com/2735a658ee12626f707bba24593785877a958a807b1e5b2a4b93986c32fc84d7/68747470733a2f2f736f6e6172636c6f75642e696f2f6170692f70726f6a6563745f6261646765732f6d6561737572653f70726f6a6563743d6f6d61722d7068705f6469266d65747269633d616c6572745f737461747573)](https://sonarcloud.io/dashboard?id=omar-php_di)

A [PSR-11](https://www.php-fig.org/psr/psr-11/) compliant Dependency Injector component

Installation
------------

[](#installation)

With [composer](https://getcomposer.org/):

```
composer require omarphp/di
```

Usage
-----

[](#usage)

### Building a simple class

[](#building-a-simple-class)

You can instantiate a class without a constructor parameter with zero configuration.

```
use Omar\DependencyInjection\Container;

class RockBand {}

$container = Container::create();

$band = $container->get(RockBand::class);
assert($band instanceof RockBand);
```

### Autowiring

[](#autowiring)

OmarDI can autowire parameter constructors.

```
use Omar\DependencyInjection\Container;

class Guitarist {}

class Drummer {}

class RockBand
{
    public function __construct(Guitarist $guitarist, Drummer $drummer) {}
}

$container = Container::create();

$band = $container->get(RockBand::class);
assert($band instanceof RockBand);
```

### Binding

[](#binding)

You can bind implementations to abstract classes and interfaces with configuration.

```
use Omar\DependencyInjection\Config;
use Omar\DependencyInjection\Container;

interface Guitarist {}
abstract class Drummer {}

class JimmyPage implements Guitarist {}
class JohnBonham extends Drummer {}

$config = Config::init()
    ->bind(Guitarist::class, JimmyPage::class)
    ->bind(Drummer::class, JohnBonham::class);

$container = Container::create($config);

$guitarist = $container->get(Guitarist::class);
$drummer = $container->get(Drummer::class);

assert($guitarist instanceof JimmyPage);
assert($drummer instanceof JohnBonham);
```

Autowiring can use the bound parameters.

```
use Omar\DependencyInjection\Config;
use Omar\DependencyInjection\Container;

interface Guitarist {}
abstract class Drummer {}

class JimmyPage implements Guitarist {}
class JohnBonham extends Drummer {}

class RockBand
{
    public function __construct(Guitarist $guitarist, Drummer $drummer) {}
}

$config = Config::init()
    ->bind(Guitarist::class, JimmyPage::class)
    ->bind(Drummer::class, JohnBonham::class);

$container = Container::create($config);

$band = $container->get(RockBand::class);
assert($band instanceof RockBand);
```

### Setup constructor parameters

[](#setup-constructor-parameters)

#### Wire implementations to constructor parameter

[](#wire-implementations-to-constructor-parameter)

You can wire the constructor parameters by their name. That's how you can inject different implementations for the same interfaces.

```
use Omar\DependencyInjection\Config;
use Omar\DependencyInjection\Container;
use Omar\DependencyInjection\Setup;

interface Guitarist {}
interface Drummer {}

class JimmyPage implements Guitarist {}
class George implements Guitarist {}
class JohnBonham implements Drummer {}
class Ringo implements Drummer {}

abstract class RockBand
{
    public function __construct(Guitarist $guitarist, Drummer $drummer) {}
}

class LedZeppelin extends RockBand {}
class Beatles extends RockBand {}

$config = Config::init()
    ->setup(LedZeppelin::class, Config::params()
        ->wire('guitarist', JimmyPage::class)
        ->wire('drummer', JohnBonham::class)
    )
    ->setup(Beatles::class, Config::params()
        ->wire('guitarist', George::class)
        ->wire('drummer', Ringo::class)
    );

$container = Container::create($config);

$ledzep = $container->get(LedZeppelin::class);
assert($ledzep instanceof LedZeppelin);

$beatles = $container->get(Beatles::class);
assert($beatles instanceof Beatles);
```

#### Configure values to constructor parameters

[](#configure-values-to-constructor-parameters)

Scalar values or object instances can be configured to constructor parameters by their name.

```
use Omar\DependencyInjection\Config;
use Omar\DependencyInjection\Container;
use Omar\DependencyInjection\Setup;

class Guitarist
{
    public function __construct(string $guitarType, int $bornInYear) {}
}

$config = Config::init()
    ->setup(Guitarist::class, Config::params()
        ->config('guitarType', 'Les Paul')
        ->config('bornInYear', 1944)
    );

$container = Container::create($config);

$jimmyPage = $container->get(Guitarist::class);
assert($jimmyPage instanceof Guitarist);
```

#### Configured and wired parameters

[](#configured-and-wired-parameters)

They can be used together.

```
use Omar\DependencyInjection\Config;
use Omar\DependencyInjection\Container;
use Omar\DependencyInjection\Setup;

interface Guitar {}
class LesPaul implements Guitar {}

class Guitarist
{
    public function __construct(Guitar $guitar, int $bornInYear) {}
}

$config = Config::init()
    ->setup(Guitarist::class, Config::params()
        ->wire('guitar', LesPaul::class)
        ->config('bornInYear', 1944)
    );

$container = Container::create($config);

$jimmyPage = $container->get(Guitarist::class);
assert($jimmyPage instanceof Guitarist);
```

### Provider callback functions

[](#provider-callback-functions)

You can set up your instances to be created with a callback function. These functions can also get their parameters from the container.

```
use Omar\DependencyInjection\Config;
use Omar\DependencyInjection\Container;

interface Guitar {}
class LesPaul implements Guitar {}

class Guitarist
{
    public function __construct(Guitar $guitar, int $bornInYear) {}
}

$config = Config::init()
    ->bind(Guitar::class, LesPaul::class)
    ->provider(Guitarist::class, function (Guitar $guitar) {
        return new Guitarist($guitar, 1944);
    });

$container = Container::create($config);

$jimmyPage = $container->get(Guitarist::class);
assert($jimmyPage instanceof Guitarist);
```

### Factory classes

[](#factory-classes)

You can create your instances with factories. These factories can be configured with the parameters in the constructor and in the \_\_invoke() method.

```
use Omar\DependencyInjection\Config;
use Omar\DependencyInjection\Container;

interface Guitar {}
class LesPaul implements Guitar {}

class Guitarist
{
    public function __construct(Guitar $guitar) {}
}

interface Drummer {}
class JohnBonham implements Drummer {}

class RockBand
{
    public function __construct(Guitarist $guitarist, Drummer $drummer) {}
}

class RockBandFactory
{
    /** @var Drummer */
    private $drummer;

    public function __construct(Drummer $drummer) {
        $this->drummer = $drummer;
    }

    public function __invoke(Guitar $guitar): RockBand
    {
        return new RockBand(new Guitarist($guitar), $this->drummer);
    }
}

$config = Config::init()
    ->bind(Drummer::class, JohnBonham::class)
    ->bind(Guitar::class, LesPaul::class)
    ->factory(RockBand::class, RockBandFactory::class);

$container = Container::create($config);

$band = $container->get(RockBand::class);
assert($band instanceof RockBand);
```

Contributing
------------

[](#contributing)

- Pull requests are welcome.
    - For major changes, please open an issue first to discuss what you would like to change.

License
-------

[](#license)

[MIT](https://choosealicense.com/licenses/mit/)

###  Health Score

21

—

LowBetter than 19% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity44

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% 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.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

2575d ago

### Community

Maintainers

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

---

Top Contributors

[![lencse](https://avatars.githubusercontent.com/u/191887?v=4)](https://github.com/lencse "lencse (3 commits)")

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan, Psalm

Code StylePHP\_CodeSniffer

Type Coverage Yes

### Embed Badge

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

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

###  Alternatives

[illuminate/contracts

The Illuminate Contracts package.

704122.9M10.1k](/packages/illuminate-contracts)[illuminate/container

The Illuminate Container package.

31278.1M2.0k](/packages/illuminate-container)[ecotone/ecotone

Supporting you in building DDD, CQRS, Event Sourcing applications with ease.

558549.8k17](/packages/ecotone-ecotone)[civicrm/civicrm-core

Open source constituent relationship management for non-profits, NGOs and advocacy organizations.

728272.9k20](/packages/civicrm-civicrm-core)[internal/dload

Downloads binaries.

98142.7k10](/packages/internal-dload)[symfony/object-mapper

Provides a way to map an object to another object

34885.7k18](/packages/symfony-object-mapper)

PHPackages © 2026

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