jasny / autowire
此包已被弃用且不再维护。未建议替代包。
PSR-11 容器的自动装配
v1.2.2
2020-04-19 06:11 UTC
Requires
- php: >=7.2.0
- jasny/reflection-factory: ^1.0
- psr/container: ^1.0
Requires (Dev)
- jasny/php-code-quality: ^2.3
README
实例化对象(而不是使用 new
),自动确定依赖项并从 PSR-11 容器中获取它们。
安装
composer require jasny/autowire
使用
使用反射确定类型构造函数参数类型的 ReflectionAutowire
实现。
class Foo { public function __construct(ColorInterface $color) { // ... } }
使用自动装配创建新的 Foo
对象
use Jasny\Autowire\ReflectionAutowire(); $autowire = new ReflectionAutowire($container); $foo = $autowire->instantiate(Foo::class); // OR $foo = $autowire(Foo::class);
可选参数
如果参数可能为 null
,则在没有容器条目的情况下将其设置为 null
。
class Foo { public function __construct(?ColorInterface $color) { // ... } }
文档注释
它还解析 文档注释,并可以从 @param
获取条目名称。条目名称必须是描述的第一部分,并且用双引号包围。
class Bar { /** * Class constructor * * @param string $color "config:bar_color" * @param ConnectionInterface $connection "db_connections.default" */ public function __construct(string $color, ConnectionInterface $connection) { // ... } }
从 @param
的类型不考虑。如果类型是单个接口(或类),则没有理由不在方法参数中使用类型提示。解析它们很困难,因为这需要将类转换为完全限定类名(FQCN),这需要查看命名空间和 use
语句。
这个库故意不支持属性或方法的自动装配。请显式地在容器函数中调用这些方法或使用抽象工厂。
未装配的参数
instantiate()
中的额外参数将直接传递给构造函数。不会对这些参数应用自动装配。
class Bar { /** * Class constructor * * @param string $color A color * @param ConnectionInterface $connection "db_connections.default" */ public function __construct(string $color, ConnectionInterface $connection) { // ... } }
use Jasny\Autowire\ReflectionAutowire(); $autowire = new ReflectionAutowire($container); $foo = $autowire->instantiate(Foo::class, 'blue');
构造函数必须以这些参数开始。无法选择性地选择需要自动装配的参数。