一个用于PHP的极简依赖注入容器(DIC)。请注意:此分支仅与PHP5.6兼容。5.5、5.4和5.3的兼容版本可在GitHub上的单独分支中找到。

0.6.4 2019-07-30 07:06 UTC

This package is auto-updated.

Last update: 2024-09-29 04:49:38 UTC


README

Dice是一个专注于轻量、快速,并且尽可能少配置的PHP依赖注入容器。

项目目标

1) 轻量级,不是由数十个文件组成的庞大库(Dice是一个100行的单个类),同时支持比更复杂的容器提供的所有功能(更多)

2) “只需工作”。基本功能应该无需配置即可使用

3) 当需要配置时,它应该尽可能最小化和可重用,同时易于使用。

4) 速度!

安装

只需将轻量级的Dice.php包含到您的项目中,即可使用而无需任何其他配置

简单示例

<?php
class A {
	public $b;
	
	public function __construct(B $b) {
		$this->b = $b;
	}
}

class B {

}

require_once 'Dice.php';
$dice = new \Dice\Dice;

$a = $dice->create('A');

var_dump($a->b); //B object

?>

完整文档

请参阅Dice PHP依赖注入容器主页以获取完整文档

PHP版本兼容性

Dice与PHP5.4及更高版本兼容,有Dice的存档版本支持PHP5.3,但不再维护。

致谢

最初由Tom Butler (@TomBZombie) 开发,感谢daniel-meister (@daniel-meister)、Garrett W. (@garrettw)、maxwilms (@maxwilms) 对错误修复、建议和改进所做的贡献。

更新

29/10/2014

  • 基于问题 #15,Dice现在将仅在它们被\Dice\Instance包裹时调用闭包。**请注意:这是向后不兼容的**。

之前Dice运行了作为替代方案传递的闭包,构造函数参数以及调用方法时


$rule->substitutions['A'] = function() {
	return new A;
};

$rule->call[] = ['someMethod', function() {
// '2' will be provided as the first argument when someMethod is called
return 2;
}];

$rule->constructParams[] = function() {
	//'abc' will be providedas the first constructor parameter
	return 'abc';
};

此行为已更改,因为它使得无法提供闭包作为构造函数参数或调用方法,因为闭包总是被调用并执行。

为了克服这一点,Dice现在只有在它们被\Dice\Instance包裹时才会调用闭包

$rule->substitutions['A'] = new \Dice\Instance(function() {
	return new A;
});

$rule->call[] = ['someMethod', new \Dice\Instance(function() {
// '2' will be provided as the first argument when someMethod is called
return 2;
}]);

$rule->constructParams[] = new \Dice\Instance(function() {
	//'abc' will be providedas the first constructor parameter
	return 'abc';
});

04/09/2014

  • 将PHP5.6分支推送到线上。这比使用PHP5.6特性的版本稍微高效一些。对于PHP5.4-PHP5.5,请参阅相关分支。此版本将在PHP5.6更广泛时维护。

26/08/2014

  • 添加了PHP5.6分支。通过使用PHP5.6特性整理了代码。PHP5.6发布时将移至master分支

28/06/2014

  • 大幅提高了效率。Dice现在成为PHP最快的依赖注入容器!

06/06/2014

27/03/2014

  • 已删除assign()方法,因为它与使用$rule->shared可用的功能重复
  • 已删除$dice->create()中的$callback参数,因为此功能的唯一真正用途可以更好地使用$rule->shareInstances实现
  • 整理了代码,移除了未使用/未记录的功能。Dice现在更加轻量级且快速。
  • 修复了一个错误,即当使用$rule->call时,它会在每个方法调用时使用构造函数中的替换规则
  • 更新了Dice文档以使用简写数组语法

01/03/2014

  • 为Xml Loader和Loader Callback类添加了测试用例
  • 添加了JSON loader + 测试用例
  • 将所有测试用例添加到测试套件中
  • 移至PHP5.4数组语法。PHP5.3兼容版本现在可在PHP5.3分支中找到。
  • 修复了使用命名实例时,每次创建类都会触发自动加载器并使用无效类名的问题

28/02/2014

  • 增加了基本命名空间支持。文档更新将随后进行。此外,已将XML加载器移入自己的文件中,如果您使用它,需要单独包含。
  • 请注意:变更不支持向下兼容。但是,通过以下查找/替换操作可以轻松修复:
	new Dice => new \Dice\Dice
	new DiceInstance => new \Dice\Instance
	new DiceRule => new \Dice\Rule