garrettw / dice
此包已被废弃且不再维护。未建议替代包。
我的Dice版本,一个用于PHP的极简依赖注入容器。完全兼容上游。我的扩展:PSR-2/4兼容性,设置默认规则的能力,代码美化,维护PHP 5.4兼容性。
v3.0.0
2018-04-11 04:22 UTC
Requires
- php: >=5.4.0
Requires (Dev)
- fabpot/php-cs-fixer: ~1.8
- phpspec/phpspec: ~2.1
README
Dice是一个专注于轻量级、快速以及尽可能少配置的PHP依赖注入容器。
项目目标
-
要轻量级,不是拥有几十个文件的庞大库(目前Dice仅有一个文件,约220行代码),同时支持比其他更复杂的容器提供的所有功能(更多)
-
“直接工作”。基本功能应无配置即可使用
-
当需要配置时,应尽可能简单、可重用,并且易于使用。
-
速度!(请参阅性能部分)
安装
只需在您的项目中包含轻量级的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
- 添加了对循环引用的支持( https://github.com/TomBZombie/Dice/issues/7)。请注意,这是糟糕的设计,但此修复将停止这种设计创建的无穷循环。
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