locomotivemtl/charcoal-factory

炭对象创建(工厂,抽象工厂,建造者,类解析器)

0.4.2 2017-10-13 12:38 UTC

This package is auto-updated.

Last update: 2024-09-05 18:31:10 UTC


README

工厂 创建(或构建)动态PHP对象。工厂可以将一个 类型 解析为FQN(完全限定名),并使用可选的参数集创建此类的一个实例,同时确保一个默认的基础类。

Build Status

目录

  • 如何安装
    • 依赖项
  • 工厂
    • 用法
    • 解析器
    • 类映射/别名
    • 确保对象类型
    • 设置默认对象类型
    • 构造函数参数
    • 执行对象回调
  • 开发
    • 开发依赖项
    • 持续集成
    • 编码风格
    • 作者
    • 变更日志
  • 许可证

如何安装

安装 charcoal-factory 的首选(也是唯一支持的)方式是使用 composer

★ composer require locomotivemtl/charcoal-factory

依赖项

  • PHP 5.5+
    • PHP的旧版本已被弃用,因此charcoal-factory不支持。

👉 当使用charcoal-factory时,开发依赖项是可选的,这些依赖项在README文件的开发部分中描述。

工厂

用法

工厂只有一个目的:即 创建 / 实例化新的PHP对象。应直接从构造函数设置工厂选项。

$factory = new \Charcoal\Factory\GenericFactory([
    // Ensure the created object is a Charcoal Model
    'base_class' => '\Charcoal\Model\ModelInterface',

    // An associative array of class map (aliases)
    'map' => [
        'foo' => '\My\Foo',
        'bar' => '\My\Bar'
    ],

    // Constructor arguments
    'arguments' => [
        $dep1,
        $dep2
    ],

    // Object callback
    'callback' => function (&obj) {
        $obj->do('foo');
    }
]);

// Create a "\My\Custom\Baz" object with the given arguments + callbck
$factory->create('\My\Custom\Baz');

// Create a "\My\Foo" object (using the map of aliases)
$factory->create('foo');

// Create a "\My\Custom\FooBar" object with the default resolver
$factory->create('my/custom/foo-bar');

构造函数选项(类依赖项)包括:

[1] 如果没有提供解析器,将使用默认的 \Charcoal\Factory\GenericResolver

解析器

发送到 create() 方法的 类型(类标识符)可以使用自定义的 Callable 解析器进行解析/解析。

如果没有将 resolver 传递给构造函数,则使用默认的 \Charcoal\Factory\GenericResolver。此默认解析器将 my/custom/foo-bar 等转换为 \My\Custom\FooBar

类映射/别名

可以通过在工厂构造函数中设置它们来添加类 别名

$factory = new GenericFactory([
    'map' => [
        'foo' => '\My\Foo',
        'bar' => '\My\Bar'
    ]
]);

// Create a `\My\Foo` instance
$obj = $factory->create('foo');

确保对象类型

可以通过设置 base_class 属性来确保对象类型。

推荐的方法是在构造函数中设置基础类。

$factory = new GenericFactory([
    'base_class' => '\My\Foo\BaseClassInterface'
]);

👉 注意,接口 也可以用作工厂的基础类。

设置默认对象类型

可以通过设置 default_class 属性来设置默认对象类型(默认类)。

推荐的方法是在构造函数中设置默认类。

$factory = new GenericFactory([
    'default_class' => '\My\Foo\DefaultClassInterface'
]);

⚠ 设置默认类名称会改变标准工厂的行为。当使用无效的类名称时,而不是抛出 Exception,将始终返回默认类类型的一个对象。

构造函数参数

可以设置“自动”构造函数参数,这些参数将被传递给创建的每个对象。

推荐的方法是将参数数组传递给构造函数来设置构造函数参数。

$factory = new GenericFactory([
    'arguments' => [
        [
            'logger' => $container['logger']
        ],
        $secondArgument
    ]
]);

执行对象回调

在对象实例化时可以执行对象回调。回调是任何接受新创建的对象引用作为其函数参数的 Callable

// $obj is the newly created object
function callback(&$obj);

推荐的方法是将 Callable 传递给构造函数来添加对象回调。

$factory = new GenericFactory([
    'arguments' => [[
        'logger' => $container['logger']
    ]],
    'callback' => function (&$obj) {
        $obj->foo('bar');
        $obj->logger->debug('Objet instanciated from factory.');
    }
]);

开发

安装开发环境

★ composer install --prefer-source

运行脚本(phplint,phpcs和phpunit)

★ composer test

开发依赖项

  • phpunit/phpunit
  • squizlabs/php_codesniffer
  • satooshi/php-coveralls

持续集成

编码风格

所有炭黑模块都遵循相同的编码风格,charcoal-factory也不例外。对于PHP

可以使用composer phpcs执行编码风格验证/强制执行。还可用composer phpcbf进行自动修复。

作者

许可证

炭黑采用MIT许可。有关详细信息,请参阅LICENSE

变更日志

0.3.2

  • 通过工厂类拆分解析的类名"cache"。

0.3.1

发布于2016-03-22

  • 在内存中保留解析的类名。如果实例化许多对象,可以大大提高速度。

0.3

发布于2016-01-28

  • 为工厂添加setArguments()方法。
  • 为工厂添加setCallback()方法。
  • 在默认类中使用时也执行回调。

0.2

发布于2016-01-26

对Charcoal-Factory进行的小幅度(但破坏BC)更改

  • 完全符合PSR1(所有方法现在都是驼峰命名法)。
  • 将回调参数添加到create()方法中。
  • 在基抽象工厂类中,create()get()现在是final
  • 内部代码、文档和工具改进。

0.1

发布于2015-11-25

  • 初始版本