ulrack/object-factory

该包已被弃用,不再维护。作者建议使用grizz-it/object-factory包。

PHP应用程序的对象工厂。

1.0.5 2020-03-05 20:39 UTC

This package is auto-updated.

Last update: 2020-04-09 19:02:05 UTC


README

Build Status

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

任何人有权免费获得本软件及其相关文档文件(以下简称“软件”)的副本,并可以在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件的副本,并允许向软件提供者提供软件的人这样做,前提是遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“现状”提供,不提供任何形式的保证,无论是明示的、暗示的,还是关于适销性、特定用途适用性或非侵权的保证。在任何情况下,作者或版权所有者不应对任何索赔、损害或其他责任承担责任,无论这些责任是由于合同、侵权或其他原因产生的,与软件或其使用或任何其他方式有关。