chipslays/container

此包已被弃用,且不再维护。未建议替换包。

2.0.0 2024-04-10 04:43 UTC

This package is auto-updated.

Last update: 2024-04-10 04:59:30 UTC


README

针对 PHP >8.0 的 PSR-11 兼容的依赖注入容器的另一个实现。

安装

composer require please/container

基本用法

此示例始终返回 Mailer 的新实例。

use Please\Container\Container;
use Please\Container\Support\Getter;

$container = new Container;

$container->bind(Mailer::class, function (Getter $get) {
    return new Mailer::($get('user'), $get('password', 'qwerty')); // qwerty - default value
});

/** @var Mailer */
$mailer = $container->get(Mailer::class, [
  'user' => 'admin',
  // and password `qwerty` (default value)
]);

此示例始终返回相同的时间。

use Please\Container\Container;

$container = new Container;

$container->singleton('random', fn () => rand());

echo $container->get('random'); // 1234567890
echo $container->get('random'); // 1234567890

示例

您可以在这里找到使用示例。

文档

您可以将任何抽象别名绑定。

use Please\Container\Container;

$container = new Container;

$container->bind(Foo::class);
$container->get(Foo::class); // ok
$container->get('foo'); // error

// if you pass a class string
// it is also automatically bind as `Foo::class`
$container->bind('foo', Foo::class);
$container->get(Foo::class); // ok
$container->get('foo'); // ok

// array of aliases
$container->bind([Foo::class, 'foo', 'another-foo-alias'], Foo::class);
$container->get(Foo::class); // ok
$container->get('foo'); // ok
$container->get('another-foo-alias'); // ok

您可以将任何原始数据类型绑定。

$container->bind('foo', 'bar');
$container->bind('foo', 1337);
$container->bind('foo', 13.37);
$container->bind('foo', true || false);
$container->bind('foo', ['bar', 'baz']);
$container->bind('foo', new stdClass);
$container->bind('foo', fopen('php://stdout', 'r'));

$container->bind('baz', null);
$container->get('baz') // returns `baz`

生成类的单例实例。

单例方法始终返回相同值或实例,类似于典型的单例模式。

$container->singleton('timestamp', fn () => time());

// or use bind class and `shared` parameter
$container->bind('timestamp', fn () => time(), shared: true);

检查容器是否为给定的抽象有绑定或实例。

$container->bind('foo', 'bar');
$container->has('foo'); // true
$container->has('baz'); // false

单例模式

如果您真的需要,可以将容器用作单例。

use Please\Container\Container as BaseContainer;
use Please\Container\Support\Traits\Singleton;

class Container extends BaseContainer
{
    use Singleton;
}

...

$container = Container::getInstance();

...

您还可以在此查看单例示例。

许可证

开源软件,许可协议为MIT 协议