ooblatron / slipstream
1.0.4
2022-12-07 23:08 UTC
Requires
- php: >=7.1
- pimple/pimple: ^3.5
README
Slipstream 自动化依赖注入,允许您在不修改任何其他类的情况下实时添加或删除依赖。依赖通常通过类的构造函数使用类型提示进行注入。或者,它们可以通过 inject() 方法进行注入。
安装
使用以下命令安装最新版本
$ composer require ooblatron/slipstream -o
请注意 -o
标志。这会生成 Slipstream 所需的 Composer 自动加载类映射。
基本用法
<?php
use Slipstream\SlipstreamFactory;
$vendorPath = '../vendor/'; // Change this to the location of your Composer vendor directory
$classLoader = require $vendorPath.'autoload.php';
$factory = new SlipstreamFactory($classLoader);
$newObject = $factory->get('newObject');
对象会自动注入所有依赖,无需您提供或更新 Pimple 注册细节。
PHP 7.4 示例:具有依赖关系的类
<?php
class NewObject
{
private Dependency1 $dependency1;
private Dependency2 $dependency2;
public function __construct(
Dependency1 $dependency1,
Dependency2 $dependency2
): {
$this->dependency1 = $dependency1;
$this->dependency2 = $dependency2;
}
public function someMethod() {
$this->dependency1->doSomething();
}
}
PHP 8.1 示例
<?php
class NewObject
{
public function __construct(
private Dependency1 $dependency1,
private Dependency2 $dependency2
): { }
public function someMethod() {
$this->dependency1->doSomething();
}
}
在对象创建后注入依赖
这对于不能通过 __construct() 方法注入依赖的第三方类(例如 Laravel 模型)非常有用。此示例依赖于您的工厂已经创建(见上方)。
<?php
class ExistingObject
{
public function inject(
private Dependency1 $dependency1,
private Dependency2 $dependency2
): { }
public function someMethod() {
$this->dependency1->doSomething();
}
}
<?php
use Slipstream\Slipstream;
class ClassUsingExistingObject
{
public function __construct(
Slipstream $slipstream,
ExistingObject $existingObject
) {
$this->slipstream = $slipstream;
$this->existingObject = $existingObject;
}
public function methodThatUsesExistingObject() {
// Inject dependencies into ExistingObject
$this->slipstream->inject($this->existingObject);
}
}
添加新类
Slipstream 依赖于 Composer 自动加载类映射来识别依赖。因此,每次您创建或重命名一个类或更改类的命名空间时,必须运行以下命令。
composer dump-autoload -o
文档
关于
要求
- PHP 7.1 或更高版本
工作原理
PHP 反射与 Composer 自动加载映射结合使用,以识别正在实例化的类的依赖项。这些依赖项会迭代实例化并注入到新对象中。
作者
Tim Rogers - tim@ooblatron.org - https://twitter.com/timdrogers
许可
Slipstream 在 MIT 许可证下发布 - 详细信息请参阅 LICENSE 文件
鸣谢
Laravel
此库受到了 Laravel 自动将依赖注入到控制器方法的方式的启发。
Pimple
此库使用 Pimple 依赖管理器 来存储已实例化的类以供重用和注入。