wikimedia/object-factory

从配置说明构造对象

v5.0.1 2023-01-09 21:59 UTC

This package is auto-updated.

Last update: 2024-09-12 06:02:18 UTC


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文件。