ulrack / object-factory
Requires
- php: ^7.2
- ulrack/storage: ^1.0
Requires (Dev)
- phpunit/phpunit: ^8.0
- squizlabs/php_codesniffer: ^3.4
README
Ulrack Object Factory
对象工厂包包含基于配置创建对象的实现。
安装
要安装此包,请运行以下命令
composer require ulrack/object-factory
使用
该包提供了一个Analyser类,该类检索类的实例化签名。该分析器由ObjectFactory使用以确定从配置中提供的参数的顺序。分析器期望来自ulrack/storage包的StorageInterface实现。此实现可用于存储先前分析并在以后检索它们(例如,缓存机制)。
创建ObjectFactory可以简单地使用以下代码片段
<?php use Ulrack\Storage\Component\ObjectStorage; use Ulrack\ObjectFactory\Factory\ObjectFactory; use Ulrack\ObjectFactory\Component\Analyser\ClassAnalyser; $factory = new ObjectFactory(new ClassAnalyser(new ObjectStorage()))
要使用工厂创建对象,只需将类和参数传递给create方法。
<?php use Ulrack\Storage\Component\ObjectStorage; /** @var ObjectStorage $result */ $result = $factory->create( ObjectStorage::class, [ 'data' => ['foo'] ] );
ObjectFactory提供的参数使用键值结构。如果(在这种情况下,ObjectStorage类)在__construct方法中期望一个类型为数组的$data参数,则$parameter参数的结构如下
$parameters = [ 'data' => [/** Value of $data here. */] ];
对于可变参数,此结构相同。
对象嵌套
某些对象在其__construct方法中需要其他对象。使用ObjectFactory也可以创建这些对象,并具有正确的配置。
有两种创建对象的方式。
配置声明
可以完全配置方法期望的嵌套对象。不是直接传递变量,而是一个数组,包含一个期望和一个可选节点。期望节点是class,此数组节点应包含期望类的字符串表示。可选节点是parameters,此数组节点将包含对象的实例化参数。如果没有要求,则可以留空或未声明。
要使用(完整的)配置声明创建ObjectFactory,如下所示
<?php use Ulrack\Storage\Component\ObjectStorage; use Ulrack\ObjectFactory\Factory\ObjectFactory; use Ulrack\ObjectFactory\Component\Analyser\ClassAnalyser; /** @var ObjectFactory $result */ $result = $factory->create( ObjectFactory::class, [ 'classAnalyser' => [ 'class' => ClassAnalyser::class, 'parameters' => [ 'analysisStorage' => [ 'class' => ObjectStorage::class, ], ], ], ] );
配置声明在技术上可以是无限深的。
对象声明
还可以重用先前生成的或实例化的类的实例。这可以通过简单地将对象传递到参数中来实现。
<?php use Ulrack\Storage\Component\ObjectStorage; use Ulrack\ObjectFactory\Factory\ObjectFactory; use Ulrack\ObjectFactory\Component\Analyser\ClassAnalyser; $classAnalyser = new ClassAnalyser(new ObjectStorage()); /** @var ObjectFactory $result */ $result = $factory->create( ObjectFactory::class, [ 'classAnalyser' => $classAnalyser ] );
这两种声明方法都可以在整个声明中使用并混合。
变更日志
请参阅变更日志获取有关最近更改的更多信息。
贡献
MIT许可证
版权所有 (c) GrizzIT
任何人有权免费获得本软件及其相关文档文件(以下简称“软件”)的副本,并可以在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件的副本,并允许向软件提供者提供软件的人这样做,前提是遵守以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“现状”提供,不提供任何形式的保证,无论是明示的、暗示的,还是关于适销性、特定用途适用性或非侵权的保证。在任何情况下,作者或版权所有者不应对任何索赔、损害或其他责任承担责任,无论这些责任是由于合同、侵权或其他原因产生的,与软件或其使用或任何其他方式有关。