phore / hydrator
将数组反序列化为对象结构
v1.1.0
2024-02-18 13:28 UTC
Requires
- php: >=7.2
- phore/core: *
Requires (Dev)
- phore/tester: *
This package is auto-updated.
Last update: 2024-09-13 13:07:27 UTC
README
将序列化/反序列化平铺到对象结构中。Hydrator解析公共属性的DocComments并根据定义实例化类。
示例
安装
composer install phore/hydrator
基本示例
class UserData { /** * @var string */ public $name; /** * Assoc Array * @var array<string, ClassType2> */ public $map; /** * @var int */ public $age; } $input = ["name"=>"bob", "age"=>37]; $userData = phore_hydrate($input, UserData::class); assert( $userData instanceof UserData);
$userData
是一个 UserData
对象,所有属性都正确转换为DocComments中指定的所需类型。
识别的注解
- 简单类型如
string
、int
、bool
、float
、array
- 数组类型如
string[]
、int[]
... - 对象类型
OtherClass
- 对象数组
OtherClass[]
- 可空属性
type|null
指南
获取器/设置器
在对象上,hydrator将按照以下顺序尝试设置属性值
- 如果对象有一个
set<PropertyName>($value)
方法,它将首先使用该方法 - 如果属性是
public
,它将被直接设置 - 如果有
__set($name, $value)
方法,它将被使用
默认值
如果找不到特定键的数据,将应用默认值
public $prop1 = []
可选属性
您可以通过在DocBlock中添加|null
来定义属性为可选
/**
* @var SomeEntity1|null
*/
public $entity1;
如果找不到输入数据,值将为null
。
在注水之前过滤输入数据
为了简化向后兼容性问题,在注水之前,将调用魔法方法__hydrate()
来预先过滤输入数据。
class Entity1 { public $p1; public function __hydrate(array $input) : array { // .. modify input to match the object .. return $input; } }
处理额外的/未定义的输入数据
默认情况下,对于未定义的输入键,hydrator将抛出异常。您可以选择这种行为