PHPackages                             wazsmwazsm/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. [PSR &amp; Standards](/categories/psr-standards)
4. /
5. wazsmwazsm/ioc-container

ActiveLibrary[PSR &amp; Standards](/categories/psr-standards)

wazsmwazsm/ioc-container
========================

Dependency injection IOC Container

v1.1(7y ago)11272MITPHPPHP &gt;=5.5

Since Apr 21Pushed 7y ago1 watchersCompare

[ Source](https://github.com/wazsmwazsm/IOCContainer)[ Packagist](https://packagist.org/packages/wazsmwazsm/ioc-container)[ Docs](https://github.com/wazsmwazsm/IOCContainer)[ RSS](/packages/wazsmwazsm-ioc-container/feed)WikiDiscussions master Synced yesterday

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

Container
=========

[](#container)

[![Build Status](https://camo.githubusercontent.com/005c703f3dac6ce674519eabd4d19a75f8a67e79a5d57c079cdbf8b9bb6e4b45/68747470733a2f2f7472617669732d63692e6f72672f77617a736d77617a736d2f494f43436f6e7461696e65722e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/wazsmwazsm/IOCContainer)

安装
--

[](#安装)

```
composer require wazsmwazsm/ioc-container
```

介绍
--

[](#介绍)

一个简单好用的 IOC 容器。

IOC 容器是一个特殊的工厂类，它可以帮助你获取你需要的对象，并自动帮你注入需要的依赖 (包括依赖的依赖注入，一直到没有依赖为止)。

IOC 容器提供了单例操作、获取实例、执行实例方法 (给方法注入依赖) 等功能，你可以使用 IOC 容器解决多重依赖的问题，提高开发的效率。

获取实例
----

[](#获取实例)

Container 提供了 getInstance 方法来获取一个实例，由 getInstance 方法获取的实例会自动进行依赖注入。

如果注入的实例也有依赖的话，IOC 容器会继续向下查找依赖进行依赖注入，直到所有的依赖注入完成。

例如：

```
use IOC\Container;

class Foo
{
    public $a = 1;
    public $b = 2;
}

class Foz
{
    public $a = 5;
    public $b = 6;
    public function __construct(Foo $foo)
    {
        $this->a = $foo->a + $this->a;
        $this->b = $foo->b + $this->b;
    }
}

class Bar
{
    public $a = 0;
    public $b = 0;
    public function __construct(Foz $foz)
    {
        $this->a = $foz->a;
        $this->b = $foz->b;
    }
}

// 获取 Bar 的实例，Container 会自动进行依赖注入
$bar = Container::getInstance(Bar::class);
var_dump($bar->a); // 6
var_dump($bar->b); // 8
```

如果要获取实例的构造方法有其他参数，可以通过 getInstance 方法的第二个参数传入：

```
Container::getInstance(Bar::class, ['param1', 'param2']);
```

Container 还提供了获取实例单例的版本 getInstanceWithSingleton，如果要获取的实例没有设置单例，getInstanceWithSingleton 方法会将该实例设置为单例并返回该实例。

运行方法
----

[](#运行方法)

Container 的 run 方法用来运行一个实例的方法，并且如果该方法有依赖则进行依赖注入。

例子：

```
use IOC\Container;

class Foo
{
    public $a = 1;
    public $b = 2;
}

class Bar
{
    public function f1(Foo $foo)
    {
        return $foo->a + $foo->b;
    }
}

$result = Container::run(Bar::class, 'f1'); // result is 3
```

你还可以使用 run 方法的第三个参数给要运行的方法传入额外参数：

```
use IOC\Container;

class Foo
{
    public $a = 1;
    public $b = 2;
}

class Bar
{
	// 注意额外传入的参数应该在要注入的参数之后
    public function f1(Foo $foo, $c, $d)
    {
        return $foo->a + $foo->b + $c + $d;
    }
}

$result = Container::run(Bar::class, 'f1', [4, 2]); // result is 9
```

如果要运行的实例的构造方法有其他参数，可以通过 run 方法的第四个参数传入：

```
Container::run(Bar::class, 'f1', [4, 2], ['param1', 'param2']);
```

单例
--

[](#单例)

设置单例: singleton 方法

```
use IOC\Container;
...
$a = new A();

Container::singleton($a);
```

获取单例: getSingleton 方法

```
use IOC\Container;

// 传入要获取单例的类名
$a = Container::getSingleton('A');
```

设置单例时还可以指定名称：

```
use IOC\Container;

$a = new A();
// 设置单例，指定名称
Container::singleton($a, 'my_singleton');
// 获取单例
$a = Container::getSingleton('my_singleton');
```

销毁单例：unsetSingleton 方法

```
use IOC\Container;

// 销毁类 A 的单例
Container::unsetSingleton('A');
// 再次获取为 null
Container::getSingleton('A');
```

单例注册
----

[](#单例注册)

Container 提供了一个 register 方法用来注册单例。和 singleton 方法不同的是，register 方法可以实现自定义类替换抽象类的功能。这个功能可以让你更改实例时不用重写获取实例的代码。

如下所示，注册一个 Exceptions\\ExceptionHandler 单例，实际注册的实例是 App\\Exceptions\\Handler，获取该实例时可以通过 Exceptions\\ExceptionHandler::class 来获取。

```
use IOC\Container;

// set exception handler
Container::register(
    Exceptions\ExceptionHandler::class,
    App\Exceptions\Handler::class
);

// get singleton 这里获取的其实是 App\Exceptions\Handler 的实例
$handler = Container::getSingleton(Exceptions\ExceptionHandler::class);
```

当 register 方法的第二个参数不传时，默认使用抽象类的实例。

```
use IOC\Container;

// set exception handler
Container::register(Exceptions\ExceptionHandler::class);

// get singleton 这里获取的是 Exceptions\ExceptionHandler 的实例
$handler = Container::getSingleton(Exceptions\ExceptionHandler::class);
```

License
-------

[](#license)

The IOCContainer is open-sourced software licensed under the [MIT license](http://opensource.org/licenses/MIT).

###  Health Score

27

—

LowBetter than 49% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity15

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity55

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

Every ~1 days

Total

2

Last Release

2578d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/18749371?v=4)[MrQin](/maintainers/wazsmwazsm)[@wazsmwazsm](https://github.com/wazsmwazsm)

---

Top Contributors

[![wazsmwazsm](https://avatars.githubusercontent.com/u/18749371?v=4)](https://github.com/wazsmwazsm "wazsmwazsm (12 commits)")

---

Tags

containerioc

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/wazsmwazsm-ioc-container/health.svg)

```
[![Health](https://phpackages.com/badges/wazsmwazsm-ioc-container/health.svg)](https://phpackages.com/packages/wazsmwazsm-ioc-container)
```

###  Alternatives

[php-di/php-di

The dependency injection container for humans

2.8k48.9M994](/packages/php-di-php-di)[slince/di

A flexible dependency injection container

20260.4k6](/packages/slince-di)[capsule/di

A PSR-11 compliant autowiring dependency injection container.

2857.5k2](/packages/capsule-di)[godruoyi/easy-container

A small PHP 5.3 dependency injection container extended from Laravel container.

334.9k2](/packages/godruoyi-easy-container)[miladrahimi/phpcontainer

Dependency injection (IoC) container for PHP projects

1322.7k2](/packages/miladrahimi-phpcontainer)

PHPackages © 2026

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