holgerk/jiggle

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

v1.0.5 2013-11-16 20:20 UTC

This package is auto-updated.

Last update: 2024-03-31 20:32:39 UTC


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

在此条件下,任何人都可以免费获得此软件及其相关文档文件(“软件”)的副本,以无限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、转授和/或出售软件的副本,并允许向软件提供的人这样做,但受以下条件约束

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定目的适用性和非侵权性保证。在任何情况下,作者或版权所有者都不应对任何索赔、损害或其他责任负责,无论这些责任是因合同、侵权或其他方式引起的,与软件或软件的使用或其他交易有关。