此包已被弃用且不再维护。作者建议使用syberisle/zit包。

Zit是一个基于Pimple的简单依赖注入器。它旨在提供与Pimple相同的简单性,同时提供略微更健壮的对象接口。

3.0.0 2016-03-11 06:23 UTC

This package is auto-updated.

Last update: 2021-08-05 19:06:46 UTC


README

Build Status Packagist Version GitHub Stars PHP 5.4+

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 方法,使其清除对象、回调和工厂,这可能会引起一些异常的向后兼容性问题。