chipslays / container
此包已被弃用,且不再维护。未建议替换包。
2.0.0
2024-04-10 04:43 UTC
Requires
- php: ^8.0
- psr/container: ^1.0|^2.0
Requires (Dev)
- symfony/var-dumper: ^7.0
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 协议。