locomotivemtl / charcoal-factory
炭对象创建(工厂,抽象工厂,建造者,类解析器)
Requires
- php: >=5.6.0
Requires (Dev)
- phpunit/phpunit: ^5.7
- satooshi/php-coveralls: ^1.0
- squizlabs/php_codesniffer: ^2.4
This package is auto-updated.
Last update: 2024-09-05 18:31:10 UTC
README
工厂 创建(或构建)动态PHP对象。工厂可以将一个 类型 解析为FQN(完全限定名),并使用可选的参数集创建此类的一个实例,同时确保一个默认的基础类。
目录
- 如何安装
- 依赖项
- 工厂
- 用法
- 解析器
- 类映射/别名
- 确保对象类型
- 设置默认对象类型
- 构造函数参数
- 执行对象回调
- 开发
- 开发依赖项
- 持续集成
- 编码风格
- 作者
- 变更日志
- 许可证
如何安装
安装 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
- PSR-1
- PSR-2
- PSR-4,因此自动加载由Composer提供
- phpDocumentor
- 请阅读phpcs.xml文件以了解代码风格的详细信息。
可以使用
composer phpcs
执行编码风格验证/强制执行。还可用composer phpcbf
进行自动修复。
作者
- Mathieu Ducharme mat@locomotive.ca
许可证
炭黑采用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
- 初始版本