holgerk / jiggle
此包已被废弃且不再维护。未建议替代包。
v1.0.5
2013-11-16 20:20 UTC
Requires
- php: >=5.3.0
README
Jiggle 是一个适用于 php 5.3+ 的依赖注入容器
默认情况下,每个依赖项都是一个单例。如果您将一个函数赋值给容器,它将被视为单例工厂。因此,当首次需要依赖项时,该函数只调用一次。
方法
singleton($class)
为给定的类创建单例工厂
- 参数 string $class 需要实例化的类
- 返回值 callable
create($class)
创建给定类的对象
如果类构造函数有参数,它们将从当前的 jiggle 实例中注入。
- 参数 string $class 要实例化的类
- 返回值 object 新创建的实例
inject($callable, $overloadedDeps = array())
执行给定的可调用项
如果可调用项有参数,它们将从当前的 jiggle 实例中注入。
- 参数 callable $callable 要调用的可调用项
- 参数 array $overloadedDeps 可选的额外或重载的依赖项
- 返回值 mixed 调用可调用项的返回值
replace($name, $value)
替换现有依赖项
如果想要模拟大型系统的一部分或客户端替换不想要的实现,则很有用。
- 参数 string $name 要替换的依赖项的名称
- 参数 mixed $value 替代实现
resolver($callable)
允许提供一个在依赖项无法解析时调用的可调用项
如果提供的解析器可以解析依赖项,它应简单地返回它。如果依赖项无法解析,解析器需要抛出异常,否则依赖项将被解析为 null。
- 参数 callable $callable 解析器可调用项
示例
设置和获取依赖项
$jiggle = new Jiggle; $jiggle->d1 = 42; echo $jiggle->d1; // => 42
使用工厂函数的懒加载
$jiggle = new Jiggle; $jiggle->d1 = function() { return 42; }; echo $jiggle->d1; // => 42
基本依赖项连接
$jiggle = new Jiggle; $jiggle->d1 = 42; $jiggle->d2 = function() use($jiggle) { return $jiggle->d1; }; echo $jiggle->d2; // => 42
将依赖项隐式注入到单例工厂函数中
$jiggle = new Jiggle; $jiggle->d1 = 42; $jiggle->d2 = function($d1) { return $d1; }; echo $jiggle->d2; // => 42
将依赖项显式注入到任何函数中
$jiggle = new Jiggle; $jiggle->d1 = 40; $jiggle->d2 = 2; $result = $jiggle->inject(function($d1, $d2) { return $d1 + $d2; }); echo $result; // => 42
使用依赖项重载的显式注入
$jiggle = new Jiggle; $jiggle->d1 = 20; $jiggle->d2 = 1000; $result = $jiggle->inject(function($d1, $d2, $d3) { return $d1 + $d2 + $d3; }, array('d2' => 20, 'd3' => 2)); echo $result; // => 42
基本实例化
$jiggle = new Jiggle; $jiggle->d1 = 40; $jiggle->d2 = 2; $jiggle->d3 = function() use($jiggle) { return new D3($jiggle->d1, $jiggle->d2); }; echo $jiggle->d3->sum(); // => 42
具有隐式构造函数注入的实例化
$jiggle = new Jiggle; $jiggle->d1 = 40; $jiggle->d2 = 2; $jiggle->d3 = function() use($jiggle) { return $jiggle->create('D3'); }; echo $jiggle->d3->sum(); // => 42
隐式构造函数注入的简写形式
$jiggle = new Jiggle; $jiggle->d1 = 40; $jiggle->d2 = 2; $jiggle->d3 = $jiggle->singleton('D3'); echo $jiggle->d3->sum(); // => 42
基本函数依赖项
$jiggle = new Jiggle; $jiggle->d1 = function() { return function() { return 42; }; }; echo $jiggle->d1(); // => 42
现有的依赖项不会意外替换
$jiggle = new Jiggle; $jiggle->a = true; $jiggle->a = false; // <- throws an exception
现有的依赖项可以隐式替换
$jiggle = new Jiggle; $jiggle->d1 = 21; $jiggle->replace('d1', 42); echo $jiggle->d1; // => 42
支持 isset
$jiggle = new Jiggle; $jiggle->d1 = 42; $this->assertTrue(isset($jiggle->d1)); $this->assertFalse(isset($jiggle->d2));
对于无法解析的依赖项,将调用解析器
$jiggle = new Jiggle; $jiggle->resolver(function($dependencyName) { if ($dependencyName == 'd2') { return 42; } throw new Exception("Could not resolve dependency: $dependencyName!"); }); $jiggle->d1 = function($d2) { return $d2; }; echo $jiggle->d1; // => 42
Composer
{ "require": { "holgerk/jiggle": "*" } }
许可证
MIT 许可证 (MIT)
版权所有 (c) 2013 Holger Kohnen
在此条件下,任何人都可以免费获得此软件及其相关文档文件(“软件”)的副本,以无限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、转授和/或出售软件的副本,并允许向软件提供的人这样做,但受以下条件约束
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定目的适用性和非侵权性保证。在任何情况下,作者或版权所有者都不应对任何索赔、损害或其他责任负责,无论这些责任是因合同、侵权或其他方式引起的,与软件或软件的使用或其他交易有关。