inxilpro / zit
3.0.0
2016-03-11 06:23 UTC
Requires
- php: >=5.4.0
- container-interop/container-interop: ^1.1
This package is auto-updated.
Last update: 2021-08-05 19:06:46 UTC
README
Zit是一个基于Pimple的简单依赖注入器。它旨在提供与Pimple相同的简单性,同时提供略微更健壮的对象接口。
⚠️ 使用syberisle/zit
代替
此包已被更新并替换为syberisle/zit
。请升级以获取最新更新和改进。
原始README
安装
Zit可以通过Composer获取
composer require inxilpro/zit
使用
Zit易于使用。与Pimple一样,对象通过返回对象实例的匿名函数定义
$container = new \Zit\Container(); $container->set('auth', function() { return new Auth(); });
所有实例化函数都将容器作为第一个参数传递,从而实现依赖注入
$container->set('auth', function($container) { return new Auth($container->get('db')); });
Zit还提供了设置实例化函数的方便的魔术方法
$container->setAuth(function() { /* ... */ }); // Or: $container->set_auth(function() { /* ... */ });
获取对象
获取对象就像这样简单
$container->get('auth');
或者,如果您喜欢简写
$container->getAuth(); // Or: $container->get_auth();
获取新对象
默认情况下,所有对象在Zit中都是共享的。也就是说,一旦创建了对象,就会返回相同的对象用于每个额外的get()
调用。如果您需要新对象,可以使用以下方法
$container->fresh('auth'); // Or: $container->freshAuth(); // Or: $container->fresh_auth(); // Or: $container->newAuth(); // Or: $container->new_auth();
注意,由于'new'关键字是保留的,您只能在使用魔术方法时使用它。
构造函数参数
有时您需要向对象的构造函数传递参数,同时还要注入依赖项。Zit会自动将所有参数传递到您的实例化函数中
$container->setUser(function($c, $id)) { $user = new User($id); $user->setDb($c->getDb()); return $user; }); $user = $container->newUser(1); // Parameters are taken into account when caching results: $user2 = $container->getUser(1); // $user2 === $user;
存储静态内容
您还可以使用Zit来存储字符串/对象等。只需传递它而不是生成器即可
$container->set('api_key', 'abcd1234567890'); $key = $container->get('api_key');
请注意:如果您想要返回可调用对象而不是可调用对象的返回值,则必须将可调用对象用实例化函数包装。
自定义容器
大多数项目都将从自定义容器中受益,该容器设置自己的注入规则。这只需扩展Zit即可完成
namespace MyApp\Di; class Container extends \Zit\Container { public function __construct() { $this->setAuth(function() { /* ... */ }); $this->setUser(function() { /* ... */ }); } }
变更日志
版本3.0.0
- 实现了容器互操作性。Zit 已经是
container-interop
兼容的,但现在它实现了接口,并在找不到项目时抛出实现Interop\Container\Exception\NotFoundException
的异常。这个异常扩展了\InvalidArgumentException
,因此 3.0.0 应该有近 100% 的向下兼容性,但我只是以防万一提高了主要版本。 - 放弃了对 PHP 5.3 的支持
- 移除了已弃用的函数
setParam
setFactory()
现在接受任何callable
,而不仅仅是Closure
- 修复了从
__call
抛出的异常消息中的拼写错误,如果不存在该方法 set()
现在是流畅的(返回容器以进行链式调用)- 为了提高速度,切换到 md4 哈希算法(我们不需要 md5 的安全性)
- 在代码中添加了文档注释
版本 2.0
- 移除了
setParam
方法,改为检查传递给set
的参数是否可调用。 - 添加了 "Factory" 变体。如果您的对象以 "factory" 结尾,这可能会导致向后兼容性问题。
- 更新了
delete
方法,使其清除对象、回调和工厂,这可能会引起一些异常的向后兼容性问题。