wikimedia / object-factory
从配置说明构造对象
Requires
- php: >=7.4.3
- psr/container: ~1.1.1 || ~2.0.2
Requires (Dev)
- mediawiki/mediawiki-codesniffer: 40.0.1
- mediawiki/mediawiki-phan-config: 0.12.0
- mediawiki/minus-x: 1.1.1
- ockcyp/covers-validator: 1.6.0
- php-parallel-lint/php-console-highlighter: 1.0.0
- php-parallel-lint/php-parallel-lint: 1.3.2
- phpunit/phpunit: ^9.5
README
从配置说明构造对象。
它可以静态使用,也可以作为一个包装PSR-11服务容器的服务,用于对象的懒加载和依赖注入。
规范数组
规范数组的内容如下
'factory' => callable,
'class' => string,
规范数组必须包含一个'类'键,该键的值为字符串,指定要实例化的类名,或者包含一个'工厂'键,该键为可调用对象(is_callable() === true)。如果两者都传递,'工厂'优先,但如果生成的对象不是指定类名的实例,则会抛出InvalidArgumentException。
'args' => array,
'closure_expansion' => bool, // default true
'spec_is_arg' => bool, // default false
'services' => (string|null)[], // default empty
'optional_services' => (string|null)[], // default empty
'args'键,如果提供,指定传递给构造函数/可调用对象的参数。'args'中的闭包实例值在传递给构造函数/可调用对象之前将调用它们,以无参数方式传递结果值。这可以用来将实时对象传递给构造函数/可调用对象。可以通过在规范中添加closure_expansion => false来抑制此行为。
如果规范中包含'spec_is_arg' => true,则忽略'args'。整个规范数组传递给构造函数/可调用对象。
如果提供了非空'services'(并且有可用服务容器),则从PSR-11服务容器请求命名的服务,并在'args'之前添加。'services'中的null
值以未更改的形式传递给构造函数。
通过'optional_services'声明的可选服务处理方式相同,除了如果服务容器中没有可用服务,则将null
作为参数传递。可选服务直接追加到常规所需服务之后。
如果在getObjectFromSpec()或createObject()的选项中传递了任何额外参数,则这些参数在'services'和'args'之前添加。这些是通过extraArgs
键传递的,并且以这种方式包含的任何闭包实例都不会扩展,无论主要参数列表是否扩展。
'calls' => array
规范还可以包含一个'calls'键,该键描述了在返回新创建的对象之前要对该对象调用的方法调用。这种模式通常称为“设置器注入”。此键的值预期是一个关联数组,其中键为方法名称,值为参数列表。参数列表将以与主对象'args'键相同的方式进行扩展(或未扩展)。
注意这些调用不会传递额外参数。
安装
$ composer require wikimedia/object-factory
使用
<?php $specs = [ // Simple constructor based injection 'testDB' => [ 'class' => PDO::class, 'args' => [ 'mysql:dbname=testdb;host=127.0.0.1', 'dbuser', 'dbpass', ], ], ]; $db = ObjectFactory::getObjectFromSpec( $specs['testDB'] ):
许可
Wikimedia ObjectFactory根据GNU通用公共许可证,版本2和任何后续版本(GPL-2.0-or-later)许可。有关更多详细信息,请参阅COPYING
文件。