garrettw/dice

此包已被废弃且不再维护。未建议替代包。

我的Dice版本,一个用于PHP的极简依赖注入容器。完全兼容上游。我的扩展:PSR-2/4兼容性,设置默认规则的能力,代码美化,维护PHP 5.4兼容性。

v3.0.0 2018-04-11 04:22 UTC

This package is auto-updated.

Last update: 2023-06-18 00:02:39 UTC


README

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

Latest Stable Version Total Downloads Latest Unstable Version License

Build Status Code Climate SensioLabsInsight Scrutinizer Code Quality

项目目标

  1. 要轻量级,不是拥有几十个文件的庞大库(目前Dice仅有一个文件,约220行代码),同时支持比其他更复杂的容器提供的所有功能(更多)

  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使用反射,这通常被错误地标记为“慢”。反射比加载和解析配置文件快得多。有一组基准测试这里这里(要自己下载基准测试工具,请参阅此存储库) Dice在大多数情况下比其他容器更快。

在实际测试中(测试6) Dice与Pimple(需要编写大量配置代码)并驾齐驱,尽管Symfony\DependencyInjection创建对象的速度更快,但它有更大的开销,并且您需要在每次页面加载时创建超过500个对象,才能比Dice更快。Phalcon的情况也是如此,加载Phalcon扩展的开销意味着除非您在每次HTTP请求中创建超过一千个对象,否则开销是不值得的。

更新

14/08/2014

  • (garrettw) 专注于代码可读性、简单性和优化,改进了我的分支

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 loader移动到自己的文件中,如果您使用它,需要单独包含。
  • 请注意:变更不具有向后兼容性。但是,通过以下查找/替换操作可以轻松修复:
	new Dice => new \Dice\Dice
	new DiceInstance => new \Dice\Instance
	new DiceRule => new \Dice\Rule