nayjest / builder
使用配置实例化对象的PHP包
Requires
- php: >=5.4.0
- nayjest/manipulator: ^3
Requires (Dev)
README
使用配置构造对象的PHP包。
1. 要求
- php 5.4+
此包未与过时的PHP版本进行测试。
如果您需要在php <= 5.3的环境中使用nayjest/builder,请自行测试。
2. 安装
推荐通过Composer安装此组件。
运行以下命令
composer require nayjest/builder
3. 概览
3.1 目的
以架构美观的方式从配置中构建复杂对象。
3.2 说明
如果您熟悉建造者设计模式,此包允许您以声明式风格创建基于构建配置的类构建器。
3.3 使用方法
3.3.1 类蓝图
当您需要构建某些类型的对象时,首先需要为该类型创建蓝图。在此包的术语中,蓝图指定了如何构建指定类型的对象。它存储类名和一组构建指令。
use Nayjest\Builder\Blueprint; $blueprint = new Blueprint( '\My\ExamplePackage\Person', # Constructed class name [] # Array of build instructions );
3.3.2 构建器
接下来,您将使用之前创建的蓝图作为构造函数参数来实例化一个构建器。在此包的术语中,构建器是Nayjest.Builder.Builder类的实例,用构建的类的蓝图初始化。此对象有一个公开的build($input)方法,它接受构建类的配置,构建实例并返回它。
构建器适合重用。您可以使用相同的构建器使用相同的蓝图构建多个对象。
use Nayjest\Builder\Builder; $builder = new Builder($blueprint); $john = $builder->build([ 'name' => 'John', 'age' => 27 ]); var_dump($john instanceof \My\ExamplePackage\Person); // result: true var_dump($john->getAge()); // result: 27
3.3.3 脚手架和指令
在构建目标对象的过程中,构建器创建一个临时对象,称为脚手架。脚手架包含构建对象所需的所有信息(输入配置、类名、构造函数参数、当它准备好时的目标实例)。
此类非常重要,因为所有构建指令都与脚手架一起工作,脚手架提供接口以访问指令所需的所有数据。
最后,指令。在此包的术语中,指令是实现了Nayjest\Builder\Instructions\Base\InstructionInterface的类的实例,并且可以修改脚手架内部的数据。
存在一组预定义的指令,但您可以创建自己的(使用用户函数执行所需操作的Nayjest\Builder\Instructions\Base\Instruction\CustomInstruction的方式是肮脏的)。
此外,实例化目标对象和设置公共属性或具有相应名称的setter(例如,对于输入字段'some_attribute'使用setSomeAttribute($val))不需要在类蓝图中有特定指令,这是默认操作。
4. 构建指令
Nayjest\Builder\Instructions\CustomInstruction
将用户函数应用于脚手架。
Nayjest\Builder\Instructions\SetValue
可用于在构建配置中指定默认值或覆盖现有值。
Nayjest\Builder\Instructions\Remove
如果存在,则从输入配置中删除值。
Nayjest\Builder\Instructions\Mapping\Build
使用指定的类蓝图替换值。
Nayjest\Builder\Instructions\Mapping\BuildChildren
使用指定的类蓝图替换目标字段内的数组元素。
Nayjest\Builder\Instructions\Mapping\ClassName
使用指定字段的值作为目标类名。
Nayjest\Builder\Instructions\Mapping\ConstructorArgument
使用指定字段的值作为构造函数参数。
Nayjest\Builder\Instructions\Mapping\CustomMapping
将用户函数应用于指定字段。
纳杰斯特.构建器.指令.映射.重命名
在输入配置中重命名指定的字段。
5. 测试
运行以下命令
phpunit
6. 许可证
© 2014 — 2015 维塔利·斯捷潘诺克
许可协议为MIT许可证。
请参阅许可证文件获取更多信息。